2017-04-15 22 views
1

有沒有一種方法可以更新或插入實體,使其DateCreated和UpdateDate字段設置爲實體保存時的某個日期。使用實體框架更新DBContext類中的創建和修改日期字段

我有一個數據提供程序輔助程序類,它封裝了我所有數據對象的更新,添加和刪除功能。但是,當保存對象時,DateCreated和UpdateDate字段爲空,我不會爲其分配當前日期。我想能夠保存我的對象與分配的日期。我想避免在執行保存操作的地方更改代碼。是否有可能在DBContext類中做到這一點?

回答

2

重寫DbContext.SaveChanges以實現此交叉切割功能。如果您只需將屬性分配給某些實體類型,則可以使用接口或類屬性來區分它們而不是慢速反射檢查:

public partial class PostalDbContext 
{ 
    public override int SaveChanges() 
    { 
     DateTime time = DateTime.Now; 

     var entries = ChangeTracker.Entries() 
      .Where(entry => entry.Entity is ITrackableEntity) 
      .ToList(); 

     ITrackableEntity x; 

     foreach (var entry in entries.Where(e => e.State == EntityState.Added)) 
     { 
      entry.SetPropertyValue(nameof(x.DateCreated), time); 
     } 

     foreach (var entry in entries.Where(e => e.State == EntityState.Modified)) 
     { 
      entry.SetPropertyValue(nameof(x.DateModified), time); 
     } 

     return base.SaveChanges(); 
    } 
} 

public static class DbEntityEntryEx 
{ 
    public static void SetPropertyValue<T>(this DbEntityEntry entry, string propertyName, T time) 
    { 
     entry.Property(propertyName).CurrentValue = time; 
    } 
} 
相關問題