Seeing everything that is persisted
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

There is something called a ChainedPersistenceHandlerBase you can inherit from and intercept everything that goes to and from the database.

You can use override as you see fit:

  1. public class UpdateHandler : ChainedPersistenceHandlerBase
  2. {
  3.   private readonly IObjectRepresentationProvider orp;
  4.   public UpdateHandler(IObjectRepresentationProvider orp, IEcoTypeSystem typeSystem)
  5.     : base(typeSystem)
  6.   {
  7.     this.orp = orp;
  8.   }
  9.   public override void UpdateDatabaseWithList(ICollection<Locator> locators)
  10.   {
  11.     DateTime timestamp = DateTime.Now;
  12.     foreach (Locator loc in locators)
  13.     {
  14.       IObject obj = orp.IObjectForLocator(loc);
  15.       if (obj.AsObject is ITrackUpdate)
  16.       {
  17.         (obj.AsObject as ITrackUpdate).PreUpdate(timestamp);
  18.       }
  19.     }
  20.     base.UpdateDatabaseWithList(locators);
  21.   }
  22. }

Maybe you have a common base class for all classes in your model, and maybe this class implements an Interface ITrackUpdate, then it would be a good thing to catch all updates and set the DateTime…

  1. public class UpdateHandler : ChainedPersistenceHandlerBase
  2. {
  3.   private readonly IObjectRepresentationProvider orp;
  4.   public UpdateHandler(IObjectRepresentationProvider orp, IEcoTypeSystem typeSystem)
  5.     : base(typeSystem)
  6.   {
  7.     this.orp = orp;
  8.   }
  9.   public override void UpdateDatabaseWithList(ICollection<Locator> locators)
  10.   {
  11.     DateTime timestamp = DateTime.Now;
  12.     foreach (Locator loc in locators)
  13.     {
  14.       IObject obj = orp.IObjectForLocator(loc);
  15.       if (obj.AsObject is ITrackUpdate)
  16.       {
  17.         (obj.AsObject as ITrackUpdate).PreUpdate(timestamp);
  18.       }
  19.     }
  20.     base.UpdateDatabaseWithList(locators);
  21.   }
  22. }

We need to install our ChainedPersistenceHandlerBase baseclass. We do this by mixing it in before the current PersistenceHandler. We do this in the ecospace – before we go active:

  1. // Install the update handler which intercepts all updates and updated the "Modified" attribute
  2. UpdateHandler uh = new UpdateHandler(FrontsidePolicy.ObjectRepresentationProvider, TypeSystem);
  3. PersistenceServiceImpl ps = Persistence as PersistenceServiceImpl;
  4. uh.NextPersistenceHandler = ps.PersistenceHandler;
  5. ps.PersistenceHandler = uh;
  6. FrontsidePolicy.PersistenceHandler = uh;
This page was edited 67 days ago on 02/10/2024. What links here