https://github.com/pjc0247/ct
Object Change Tracking in .NET
https://github.com/pjc0247/ct
csharp dotnet
Last synced: 11 months ago
JSON representation
Object Change Tracking in .NET
- Host: GitHub
- URL: https://github.com/pjc0247/ct
- Owner: pjc0247
- Created: 2019-08-14T05:41:10.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2019-09-24T08:34:11.000Z (almost 7 years ago)
- Last Synced: 2025-07-24T02:39:39.405Z (11 months ago)
- Topics: csharp, dotnet
- Language: C#
- Homepage:
- Size: 13.7 KB
- Stars: 7
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- Changelog: ChangeTracker.sln
Awesome Lists containing this project
README
ct
====
Object Change Tracking in .NET
```cs
interface Item : IObserved {
int Quantity;
string Name;
}
interface Player : IObserved {
string Name;
ICollection Items;
}
```
__Property tracking__
```cs
var player = ObservedEntity.Create();
player.Name = "John Doe";
player.HasChanges; // TRUE
player.ConfirmChanges();
player.HasChanges; // FALSE
```
__Collection tracking__
```cs
var item = ObservedEntity.Create();
item.Name = "Sword";
item.Quantity = 10;
player.Items.Add(item);
player.HasChanges; // TRUE
```
__Deep tracking (Tracking Graph)__
```cs
player.ConfirmChanges();
player.HasChanges; // FALSE
player.Items[0].Quantity = 15;
player.HasChanges; // TRUE
```
__Change revisions__
```cs
var rev = player.UncommitedRevision;
foreach (var c in rev.Changes)
Console.WriteLine($"{c.Key}, {c.Prev} => {c.After}");
var revisions = player.Revisions;
Console.WriteLine(revisions.Revision); // Revision No.
```
Performance Consideration
----
`IObserved` objects do more stuffs for tracking changes. It's definetly slower than non-tracking objects. Please be aware of the performance and do not use this for heavily changing objects.