2013-04-11 35 views
24

我一直在使用Add(),並遇到一個問題,其中父實體在數據庫中被複制時,Add的孩子。使用Attach()解決了這個問題,但我想知道爲什麼而不是盲目地絆倒。何時使用DbSet <T> .Add()vs DbSet <T> .Attach()

+0

我認爲這個http://stackoverflow.com/questions/3920111/entity-framework-4-addobject-vs-attach將有望回答你的問題 – 2013-04-11 14:18:43

+0

謝謝。這也有助於:http://stackoverflow.com/a/15310068/1185053 – 2013-04-17 11:09:33

回答

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