2011-06-14 145 views
1

我有一個基類,如下所示。我所有的實體從這個實體框架4.1識別上下文中的新實體

public abstract Entity 
{ 
    public DataTime CreationDate{get;set;} 
    public DataTime ModifiedDate{get;set;} 
} 

我想設置CreationDate當新的實體被添加到數據庫中繼承。

通過覆蓋SaveChanges()方法和檢查EntityState是在Modified狀態我可以設置ModifiedDate

問題是我無法通過檢查EntityState來識別它是否是新實體,因爲新實體和其他加載實體處於Added狀態。

那麼有沒有辦法區分新的實體?

在此先感謝。

回答

1

加載的實體總是處於Unchanged狀態。新增實體Added狀態,更改實體Modified狀態並刪除實體Deleted狀態。如果你看到任何其他行爲,你做錯了什麼或使用EF錯誤。順便說一句。除非你的創作過程不會很長一段時間,設置CreationDate可以通過簡單地做:

public Entity() 
{ 
    CreationDate = DateTime.Now; 
} 
0

我工作圍繞這在ChangeTracker.Entries()通過項目去和分配當前日期/時間的創建日期的地方CreationDate-Property爲null。示例:

public override int SaveChanges() 
{ 
    DateTime saveTime = DateTime.Now; 
    foreach (var entry in this.ChangeTracker.Entries()) 
    { 
    if (entry.Entity is Entity) 
    { 
     if (entry.Property("CreationDate").CurrentValue == null) 
     entry.Property("CreationDate").CurrentValue = saveTime; 
     entry.Property("ModifiedDate").CurrentValue = saveTime; 

    } 
    } 
    return base.SaveChanges(); 
}