0
我使用Override Save Changes問題中的代碼在我的應用程序中實現審計。當一個實體被添加時,一切都很好。但是,當實體被修改時,「CreatedOn」日期從不加載。實體框架4.1 DbContext覆蓋SaveChanges屬性不加載
它始終爲空,所以最初的「CreatedOn」日期從數據庫中刪除。
我也嘗試查看存儲在實體中的OriginalValues集合,併爲「ModifiedOn」日期填充它,但不填寫「CreatedOn」日期。這兩個字段都填充到數據庫中...爲什麼一個會被EF加載,一個不會被加載?
public override int SaveChanges()
{
var changeSet = ChangeTracker.Entries<IAuditable>();
if (changeSet != null)
{
foreach (DbEntityEntry<IAuditable> entry in changeSet)
{
switch (entry.State)
{
case EntityState.Added:
entry.Entity.CreatedOn = DateTime.Now;
entry.Entity.ModifiedOn = DateTime.Now;
break;
case EntityState.Modified:
entry.Entity.ModifiedOn = DateTime.Now;
//entry.Entity.CreatedOn date always null here
break;
}
}
}
return base.SaveChanges();
}
您是否找到了解決方案?今天我碰到了和你一樣的問題,只是在我的情況下,它是'UpdatedBy' /'UpdatedById',它是空的。有趣的是,'UpdatedOn'工作得很好,即使當我檢查SSMS中的行時,'UpdatedOn'或'UpdatedById'都不爲NULL。我想知道審計字段是否以某種方式相互衝突,只要他們三個指向同一實體... –
我從來沒有找到一個解決方案 - 我最終結束了重新加載創建的日期從數據庫保存前。不理想的額外數據庫調用,但它的工作原理。 – Neil
昨晚我一直在挖掘這個,發現它是DBSet.Remove(entity)什麼將我的屬性設置爲null(甚至在調用'SaveChanges()'之前)。這顯然是[由設計](http://stackoverflow.com/a/6782744/88709),這是一種恥辱,因爲我最終不得不將邏輯上移到我的存儲庫。我寧願在DbContext中實現軟刪除,因爲它更幹。無論如何感謝您的更新! –