2012-07-29 30 views
24

可能重複:
Entity Framework 4 - AddObject vs AttachAttach()在Entity Framework中做了什麼?

我見過的使用附加了幾次,特別是操縱模型時。

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

從上下文它看起來像它只是運行一個UPDATE針對EntityFrameworks的記錄,但我也看到它在DELETE語句中使用。所以我只能假設它只是獲得一個指向數據庫的指針?

有人能指出我正確的方向,我已經搜索了一段時間,雖然我沒有空虛,但我找不到任何良好的explinations(從概述和內部)。

+0

參見[這個問題](HTTP:/ /stackoverflow.com/q/3920111/406903)並接受有關'Attach'和'AddObject'的答案。 – hmqcnoesy 2012-07-29 12:37:27

+1

感謝@hmqcnoesy錯過了一個:)投票結束重複。 – 2012-07-29 12:41:54

回答

36

正如興趣點的代碼,你已經張貼什麼都不做

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    context.SaveChanges(); 
} 

這一切確實是附加實體跟蹤圖表不作任何修改的實體和保存。

之前附着在被忽略的對象進行保存任何更改

如果實際更新的屬性,即什麼是更有趣的是:

using (var context = new MyEntities()) 
{ 
    context.Attach(client); 
    client.Name = "Bob"; 
    context.SaveChanges(); 
} 
+1

有趣的是,我發現它只在附加後纔會發生變化。對不起,我們有一個很好的乾淨的方式來編輯現有的記錄,你已經有一個修改過的類(ID是相同的)?排序「更新所有更改的方法」方法? – 2012-07-29 12:45:34

+1

這取決於稍微改變跟蹤方法,但有了快照跟蹤(您幾乎可以肯定使用),最好的方法是通過設置實體ladislav上的髒標誌觸及如何在此處執行此操作,http:// http:// stackoverflow.com/a/6829996/1070291但您可能想要在實體上執行它而不是屬性 – 2012-07-29 12:52:03

+18

@JohnMitchell附加現有實體後,您可以將其更改狀態設置爲已修改,例如'context.Entry(client).State = EntityState.Modified; ' – devlord 2015-05-08 23:26:19

相關問題