Library to compare two entity object graphs detecting changes
The EntityChange library is available on nuget.org via package name EntityChange.
To install EntityChange, run the following command in the Package Manager Console
PM> Install-Package EntityChange
More information about NuGet package available at https://nuget.org/packages/EntityChange
- Compare complete entity graph including child entities, collections and dictionaries
- Collection compare by index or element equality
- Dictionary compare by key
- Custom value string formatter
- Custom entity equality compare
- Markdown or Html change report formatter
Configure the Contact properties and collections.
EntityChange.Configuration.Default.Configure(config => config
.Entity<Contact>(e =>
{
// set the FirstName display name
e.Property(p => p.FirstName).Display("First Name");
// compare the Roles collection by string equality
e.Collection(p => p.Roles)
.CollectionComparison(CollectionComparison.ObjectEquality)
.ElementEquality(StringEquality.OrdinalIgnoreCase);
// set how to format the EmailAddress entity as a string
e.Collection(p => p.EmailAddresses).ElementFormatter(v =>
{
var address = v as EmailAddress;
return address?.Address;
});
})
.Entity<EmailAddress>(e =>
{
e.Property(p => p.Address).Display("Email Address");
})
);Compare to Contact entities
// create comparer using default configuration
var comparer = new EntityComparer();
// compare original and current instances generating change list
var changes = comparer.Compare(original, current).ToList();Sample output from the MarkdownFormatter
OUTPUT
- Removed
AdministratorfromRoles - Changed
Email Addressfromuser@Personal.comtouser@gmail.com - Added
user@home.comtoEmail Addresses - Changed
StatusfromNewtoVerified - Changed
Updatedfrom5/17/2016 8:51:59 PMto5/17/2016 8:52:00 PM - Changed
Zipfrom10026to10027 - Changed
Numberfrom888-555-1212to800-555-1212 - Added
BlahtoCategories - Changed
Datafrom1to2 - Changed
Datafrom./hometo./path