SaveChanges时存在EntityFramework 4检查字段

时间:2014-03-13 09:35:22

标签: c# entity-framework

我试图自动更新" CreateDate"和" UpdateDate"使用EntityFramework 4创建或更新行时。

我在这里搜索并覆盖了SaveChanges方法,它运行良好。

public partial class MyEntities: DbContext
{
    public override int SaveChanges()
    {
        var context = ((IObjectContextAdapter)this).ObjectContext;
        context.DetectChanges();
        var entries = context.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified);
        foreach (var entry in entries)
        {
            CurrentValueRecord entryValues = entry.CurrentValues;
            if (entry.State == EntityState.Added)
            {
                if (entryValues.GetOrdinal("CreateDate") > 0)
                    entryValues.SetDateTime(entryValues.GetOrdinal("CreateDate"), DateTime.Now);

                if (entryValues.GetOrdinal("UpdateDate") > 0)
                    entryValues.SetDateTime(entryValues.GetOrdinal("UpdateDate"), DateTime.Now);

            }

            if (entry.State == EntityState.Modified)
            {
               if (entryValues.GetOrdinal("UpdateDate") > 0)
                    entryValues.SetDateTime(entryValues.GetOrdinal("UpdateDate"), DateTime.Now);

            }
        }

        return base.SaveChanges();
    }
}

但并非每个表都有UpdateDate,有些甚至没有CreateDate字段

entryValues.GetOrdinal("UpdateDate")

我不知道如何检查条目是否包含这些字段,也找不到任何

  

...试

方法

1 个答案:

答案 0 :(得分:1)

我会考虑为具有CreateDate或UpdateDate

的实体提供基类或接口
public interface IAuditEntity
{
   DateTime CreateDate {get;set;}
   DateTime UpdateDate {get;set;}
}

public class SomeEntity : IAuditEntity
{
   public DateTime CreateDate {get;set;}
   public DateTime UpdateDate {get;set;}
}

然后在保存功能中,您可以检查您的条目是否为IAuditEntity

if (entry is IAuditEntity) 
{
   if(((IAuditEntity)entry).CreateDate ...)
   {
      //... 
   }
}