簡體   English   中英

實體框架ObjectContext在SaveChanges之前刪除實體

[英]Entity Framework ObjectContext Remove Entity Before SaveChanges

我有一個Person表,其中有一個可為空的AddressId,它是外鍵到Address表的。 所以零..一對多。

使用EF和ObjectContext,我可以調用person.Address來訪問一個人的Address對象。 整齊!

看一下這個相當簡單的代碼,然后我會告訴你我的問題:

var _db = new DataContext();
Person person = _db.getThatOneGuy();

//some changes are done to the person object
person.FirstName = "Harry";

//If there's no address I want to make one
if(person.Address == null)
person.Address = new Address();

person.Address.StreetOne = "blah";
person.Address.StreetTwo = "blah";

//I decide I don't actually want this new address
person.Address = null;

_db.SaveChanges();

調用SaveChanges()仍會生成一個sql UPDATE(名字='Harry'),但這很棒,但是它還會生成一個sql INSERT語句,試圖添加該新地址(等等)。 (我知道,因為我在sql探查器中檢查了生成的SQL)這是錯誤的,因為我有諸如StateId之類的字段不能為空,但是我甚至不希望它嘗試添加該地址(我試圖通過添加該地址來停止它) null)請幫幫我。

注意:以前我已經成功完成了集合(很多關系),在這里我可以進行person.Addresses.Add(addressObj)然后person.Addresses.Remove(addressObj)和ObjectContext知道不執行插入操作。不知道如何處理這個0..1到很多地址的情況。

謝謝。

問題在於,將Address屬性設置為null不會從上下文中刪除Address實例。 它僅通知上下文Person實例和Address實例之間沒有關系。 您仍然必須從上下文中刪除Address實例。 嘗試這個:

_db.Detach(person.Address);
_db.SaveChanges();

要么:

var address = person.Address; 
person.Address = null;
_db.Detach(address);
_db.SaveChanges();

暫無
暫無

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

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