EF6代码首先无法更新对象的外键 - 参照完整性约束

时间:2014-07-02 05:44:55

标签: entity-framework ef-code-first

我和人与地之间有一对一的关系。如果我尝试更改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

1 个答案:

答案 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;