我有一個Person表,其中有一個可爲空的AddressId,它是外鍵的Address表。所以零..一個到很多。實體框架ObjectContext在SaveChanges之前刪除實體
使用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(名字=「哈利」),這是偉大的,但它還會生成一條sql INSERT語句,試圖添加新地址(blah,blah)。 (我知道,因爲我檢查了SQL分析器中生成的SQL)它的錯誤,因爲我有像StateId這樣的字段不可爲空,但我不希望它甚至嘗試添加該地址(我試圖阻止它通過使它null)請幫助我。
注意:我之前已經成功使用過集合(多對多關係),在這裏我可以執行person.Addresses.Add(addressObj)然後person.Addresses.Remove(addressObj)並且ObjectContext知道不要插入。 ...只是不知道如何處理這個0..1到很多地址的情況。
謝謝。
謝謝你這做的工作。我還必須在調用_db.Detach(address)之後設置:person.AddressId = null。這是因爲調用person.Address = new Address()將person.AddressId設置爲0(以前爲空)。我需要它爲空,因爲在數據庫中沒有Id = 0的地址,因此引發了外鍵錯誤。再次感謝。 –