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
-~----------~----~----~----~------~----~------~--~---

Reply via email to