EntityChange - Library to compare two entity object graphs
November 28, 2016Overview
Library to compare two entity object graphs detecting changes
Features
- 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
Download
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
Configuration
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");
})
);
Comparison
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();
Change Report
Sample output from the MarkdownFormatter
OUTPUT
- Removed
Administrator
fromRoles
- Changed
Email Address
fromuser@Personal.com
touser@gmail.com
- Added
user@home.com
toEmail Addresses
- Changed
Status
fromNew
toVerified
- Changed
Updated
from5/17/2016 8:51:59 PM
to5/17/2016 8:52:00 PM
- Changed
Zip
from10026
to10027
- Changed
Number
from888-555-1212
to800-555-1212
- Added
Blah
toCategories
- Changed
Data
from1
to2
- Changed
Data
from./home
to./path