我一直在使用Add()
,並遇到一個問題,其中父實體在數據庫中被複制時,Add
的孩子。使用Attach()
解決了這個問題,但我想知道爲什麼而不是盲目地絆倒。何時使用DbSet <T> .Add()vs DbSet <T> .Attach()
24
A
回答
25
那麼,當你使用Attach
你告訴上下文,該實體已經在數據庫中,SaveChanges
將不會影響附加的實體。另一方面,Add
會將上下文中實體的狀態(如果它已經存在)更改爲Added
,這意味着它將在您調用SaveChanges
時將總是插入數據庫中。
這就是區別。
+0
感謝您的答覆。爲什麼然後在Edit中的自動生成的Controller中使用'db.Entry(model).State = EntityState.Modified; db.SaveChanges();'而不是'Attach()'? – 2013-04-12 16:08:33
+1
因爲當Attach()一個已經在**上下文**中的實體時,就像存儲在模型變量中的實體一樣,它將實體的狀態設置爲「Unchanged」,因此如果你使用'Attach()'爲此目的,當你調用'SaveChanges()'時,你的實體不會被更新。 – 2013-04-12 16:30:20
相關問題
- 1. DbSet <>和虛擬DbSet <>有什麼區別?
- 2. 在EF 4.1中,我可以使用DBSet <ISomething>而不是DBSet <Something>?
- 3. DbSet <TEntity> .Find() - 反射
- 4. NSubstitute DbSet/IQueryable <T>
- 5. ObjectSet.Context VS DbSet
- 6. Cast DbSet <T>和調用方法
- 7. 添加方法類DbSet <TEntity>
- 8. 使用字符串作爲類型的DbSet像EF-CodeFirst中的DbSet <string>
- 9. 使用IQueryable的<TEntity>代替DbSet <TEntity>問題
- 10. 部隊更新TGT
- 11. EntityFramework,如何決定使用switch/case的dbSet <TEntity>?
- 12. 遷移:DbSet <T> .AddOrUpdate麻煩
- 13. DbSet的C#泛型<something>
- 14. ASP.NET查詢泛型DBSet <T>
- 15. DbSet <entity> .Load()函數在EF 6.0
- 16. 模擬DbSet <TEntity>存儲庫中
- 17. 嘲笑DbSet <T>內嵌
- 18. 如何將此IQueryable <Patient>轉換爲DbSet <Patient>?
- 19. 。 DbSet
- 20. 當使用DbSet <T> .SqlQuery()時,如何使用命名參數?
- 21. 有什麼樣DbSet <T> .RemoveWhere(謂語<T>)
- 22. DbSet <TEntity>,IQueryable的<TEntity> - OOP概念
- 23. 使用服務負責人獲得TGT
- 24. 無法從AD獲得TGT
- 25. 實體框架 - 使用DBSet讀取TPT數據<T> .SqlQuery
- 26. 嘗試使用DbSet <TEntity>。Where()with EF7 and ASP.NET5
- 27. 使用DbSet <>進行尋呼本地
- 28. 訪問DBSet時的NullReferenceException。使用MySQL,EF6
- 29. 如何觀察DbSet的添加動作<T>?
- 30. DbSet <>。添加會導致調用SaveChanges。爲什麼?
我認爲這個http://stackoverflow.com/questions/3920111/entity-framework-4-addobject-vs-attach將有望回答你的問題 – 2013-04-11 14:18:43
謝謝。這也有助於:http://stackoverflow.com/a/15310068/1185053 – 2013-04-17 11:09:33