我正在使用EF 5處理C#ASP.NET MVC 5 Web應用程序。使用EF映射我的數據庫表生成一個DbContext
類和一個.edmx
文件。今天,我讀a great article about creating generic DAL classes,但我停在下面的句子:混淆關於System.Data.EntityState.Add和DbSet.Add之間差異(如果有)的文章和文檔
注意,使用輸入方法來改變實體的狀態將 只會影響您在傳遞給該方法的實際實體。與DbSet.Add方法不同,它不會通過圖形級聯 並設置所有相關對象的狀態,即 。
違背什麼是在這些問題中提到:
- http://forums.asp.net/p/2015170/5803192.aspx
- http://forums.asp.net/p/2060606/5943259.aspx
- Difference between DbSet.Add(entity) and entity.State = EntityState.Added
- What is the difference between IDbSet.Add and DbEntityEntry.State = EntityState.Added?
在上述所有問題的答案,所有用戶提到使用System.Data.EntityState.Added
與使用DbSet.Add
完全相同。但是我首先提到的文章指出,使用System.Data.EntityState.Added
將不會級聯通過圖表。
根據我的測試,我得出結論,使用System.Data.EntityState.Added
將通過與DBset.Add
案例相同的圖表級聯。這篇文章是錯誤的,還是它是我的測試和Q & A?
所以你說使用EntityState.Added和使用DBset.Add是完全一樣的? –
是的,如果你的實體沒有被上下文跟蹤,這兩個方法將做同樣的事情,具有完全相同的結果,這通過測試例子和源代碼探索來證實。 – Evk
因此假設實體正在被上下文跟蹤,那麼它們會不同?正如你所說的「如果你的實體沒有被跟蹤...」 –