我和人与地之间有一对一的关系。如果我尝试更改PlaceId,或者将Place属性指定为新位置,则会出现错误。你怎么改变相关实体?
以下内容失败:发生了引用完整性约束违规:定义引用约束的属性值在关系中的主体和从属对象之间不一致。
person.Place.PlaceId = placeId;
_db.Entry(person.Place).State = EntityState.Modified;
_db.Entry(person).State = EntityState.Modified;
_db.SaveChanges();
如果我尝试使用以下更新,我会得到同样的错误。我应该只使用存储过程吗?我花了几分钟来创建一个存储过程来进行更新,但几个小时的实体框架搞乱了,我仍然无法让它工作。
person.Place = Place; //where Place is a valid object
答案 0 :(得分:0)
这是1:1的关系。
public class Person
{
public int PlaceId {get; set;}
[ForeignKey("PlaceId")]
public Place Place {get; set;}
}
我终于通过将属性设置为null然后在此之后设置FK属性来使其工作。此外,如果我在设置FK值之前将EntityState设置为已修改,那么我会得到相同的错误,因此必须按照这个确切的顺序完成。我不喜欢它,因为它不直观,我找不到任何关于如何做的文档。
_db.People.Attach(person);
_db.Entry(person).State = EntityState.Modified;
person.Place = null;
person.PlaceId = placeId;