我有一个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的地址,因此引发了外键错误。再次感谢。 –