我试图自动更新" 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")
我不知道如何检查条目是否包含这些字段,也找不到任何
...试
方法
答案 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 ...)
{
//...
}
}