views:

28

answers:

1

Hello, is there any way of going through all the new/modified entities and setting their, inserted_at, updated_at fields?

With ObjectStateManager I can get a list of those entities but could not find a way of setting the entity property values.

foreach (var item in db.ObjectStateManager.GetObjectStateEntries(EntityState.Added))
{
System.Data.Objects.DataClasses.EntityObject entity = (System.Data.Objects.DataClasses.EntityObject)(item.Entity);
// now how can I set its .inserted_at to DateTime.Now
}

here is my current solution

public interface IUpdateTrack
{
    DateTime? updated_at { get; set; }
    Guid? updated_by { get; set; }
}
public interface IInsertTrack
{
    DateTime? inserted_at { get; set; }
    Guid? inserted_by { get; set; }
}

implement the interface in the partial class

public partial class crm_customer : BaseDB.IInsertTrack, BaseDB.IUpdateTrack

in the repository class

public void Save()
{
    foreach (var item in db.ObjectStateManager.GetObjectStateEntries(EntityState.Added))
    {
        System.Data.Objects.DataClasses.EntityObject entity = (System.Data.Objects.DataClasses.EntityObject)(item.Entity);
        if (item.Entity is BaseDB.IInsertTrack)
        {
            IInsertTrack insert_track = (IInsertTrack)(item.Entity);
            insert_track.inserted_at = DateTime.Now;
            insert_track.inserted_by = BaseDB.SessionContext.Current.ActiveUser.UserUid;
        }
    }
    foreach (var item in db.ObjectStateManager.GetObjectStateEntries(EntityState.Modified))
    {
        if (item.Entity is BaseDB.IUpdateTrack)
        {
            IUpdateTrack update_track = (IUpdateTrack)(item.Entity);
            update_track.updated_at = DateTime.Now;
            update_track.updated_by = BaseDB.SessionContext.Current.ActiveUser.UserUid;
        }
    }

I would like a solution that does not require implementing the interface for each class in the model, its error prone, you might forget to implement this interfaces for some classes. I am using EF4 using database-first approach.

+1  A: 
Morteza Manavi