我有一个 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 (firstname = 'Harry'),这很好,但它也会生成一个 sql INSERT 语句,试图添加该新地址(等等,等等)。(我知道是因为我在 sql profiler 中检查了生成的 SQL)它出错是因为我有像 StateId 这样不可为空的字段,但我什至不希望它尝试添加该地址(我试图阻止它是通过使它空)请帮助我。
注意:我之前在集合(多对多关系)方面取得了成功,我可以在其中执行 person.Addresses.Add(addressObj) 然后 person.Addresses.Remove(addressObj) 并且 ObjectContext 知道不进行插入......只是不知道如何处理这种 0..1 到多个地址的情况。
谢谢。