It's sounds as if this for auditing purposes. If that's the case then you may find this helpful ... http://nhforge.org/wikis/howtonh/creating-an-audit-log-using-nhibernate-events.aspx
On Oct 2, 10:48 pm, David Archer <[email protected]> wrote: > (Cross posting from a question I asked on StackOverflow earlier today. > Feel free to answer there or answer here in the newsgroup.) > > http://stackoverflow.com/questions/1511348/how-can-i-do-generic-field... > > In my application, I've got a few different types of entities that I > have a requirement to do field-level change tracking on. I've googled > for this and only can come up with examples on doing simple "Date > Inserted" and "Date Updated" audit tracking where you just modify > fields on the entity being persisted already. My requirements are more > complex because: > > 1. I need to create new entities representing the changes not just > modify fields on the entity being saved (as with the Date Inserted, > Date Updated examples I've found) > 2. I need to save these new entities to the DB in the same transaction > updating the tracked entity > 3. I need to track changes to collections of ValueObjects attached to > the tracked entity > 4. I don't want to have to write seperate logging code for every > tracked entity > > Example code: > > public interface ITrackChanges {} > { > > } > > public class Account : ITrackChanges > { > public int Id; > public string AccountNumber; > public string CustomerName; > public string CustomerAddress; > > } > > public class Computer : ITrackChanges > { > public int Id; > public string AssetTag; > public string SerialNumber; > public IEnumerable<IPAddress> IPAddresses; > > } > > public class IPAddress : ValueObject > { > public string Address; > > } > > Whenever any of the values of an Account or Computer object changes or > the list of IPAddresses associated with a Computer object changes, I > need to create and save these entity change records: > > public class EntityChange > { > public string EntityType; > public string EntityId; > public string PropertyName; > public string OldValue; > public string NewValue; > > } > > Each tracked entity implements the ITrackChanges marker interface and > each value object inherits from the ValueObject base class. The value > objects are mapped as components in NHibernate. > > As an example of what I'm looking to get as the end result, if I > update the Computer object with Id 1 and change the AssetTag from > "ABC123" to "ABC124" and change the list of IP addresses from > { "1.2.3.4" } to { "1.2.3.4" , "1.2.3.5" }, I should get 2 > EntityChange records: > > EntityChange #1 > { > EntityType = "Computer" > EntityId = 1 > PropertyName = "AssetTag" > OldValue = "ABC123" > NewValue = "ABC124" > > } > > EntityChange #2 > { > EntityType = "Computer" > EntityId = 1 > PropertyName = "IPAddresses" > OldValue = "1.2.3.4" > NewValue = "1.2.3.4, 1.2.3.5" > > } > > Any ideas on the best way to implement this? From my reading of the > docs, it looks like I need to write an interceptor and/or event > listener but I haven't been able to find any examples beyond some that > just modify the entity being updated. Example code is definitely > welcome in any responses. > > Am I wrong in assuming that this should be something supported by > NHibernate? I was able to implement this in a previous application > that used LLBLGen as the ORM but this is the first time I've had to > implement this in an application using NHibernate. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
