[英]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.