簡體   English   中英

在沒有往返的情況下更新實體框架6

[英]Update in Entity Framework 6 without a roundtrip

在EF 4.1中,當我想更新記錄時,我可以通過創建新實體,設置主鍵,將其附加到DBContext,然后更新字段來避免首先加載它。 更改跟蹤將確保只有在附加實體后我更改的字段才會更新。 這里解釋這種方法。 但現在我正在使用EF 6.1在ASP.NET項目上嘗試它,並發現它不起作用。

var court_code = new System_Court();
court_code.UID = UID;
SHEntity.System_Court.Attach(court_code);
court_code.Deleted = true;
SHEntity.SaveChanges();

這可能以前有用,但現在它給了我一個驗證錯誤,說我缺少各種必填字段 - 我是,但它不應該在意,因為Deleted是我想要更新的唯一記錄。 但如果我通過往返進行,它可以正常工作。

var court_code = SHEntity.System_Court.Where(w => w.UID == UID).First(); 
court_code.Deleted = true;
SHEntity.SaveChanges();

這是EF 4和EF 6之間的變化嗎? 我看到EF 6生成了與EF 4不同的實體類(EF 4有一堆像Entity Key這樣的東西,其中EF 6看起來像一個簡單的POCO)。 谷歌搜索顯示了EF 4和5之間的一些變化,但我沒有看到任何提及如何使這個技巧現在工作。

更新:看看由第二個代碼塊執行的sql,我看到只是Deleted正在更新,因為它應該..所以這是創建對象並附加它的一些問題?

雖然編碼我設法偶然發現了幾次正確的答案,然后才意識到我在問錯了問題。 在評論的幫助下,我了解了一些涉及變更跟蹤的EF 5破壞性更改,這幫助我意識到我需要禁用驗證。

查看這個問題以獲得解釋,但基本上我需要的是

SHEntity.Configuration.ValidateOnSaveEnabled = false;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM