即使找到密钥,实体框架也会为导航属性插入行

时间:2012-08-28 10:38:01

标签: c# entity-framework ef-database-first

我正在使用Entity Framework。我有一个表在Person PersonCategory上有一个外键的表。 Person Id是一个自动递增的标识(1,1)。每次我更新person实体时,实体框架都会为PersonCategory表插入一行,即使找到了类别。

我正在使用数据库优先设计。

class Person
{
  public string Name {get;set}
  public PersonCategory {get;set;}
}

class PersonCategory
{
  public int ID {get;set}
  public string Name{get;set;}
}

3 个答案:

答案 0 :(得分:3)

首先,您需要将现有的PersonCategory附加到上下文;

var myPersonCat = new PersonCategory { ID = 1, Name = "Foo" };
var myPerson = new Person { Name = "Bar", PersonCategory = myPersonCat };

context.PersonCategories.Attach(myPersonCat);    
context.People.Add(myPerson);

答案 1 :(得分:0)

在保存State

之前,您需要将PersonCategory的{​​{1}}设置为Unchanged

答案 2 :(得分:0)

您可以发布您用于更新的代码吗? 听起来我每次都会添加一个新人,并为新记录添加一个人类别。 你想要的是从EF上下文中检索你想要的人,更新你想要的字段,并将更改保存到上下文,而不向数据库添加任何新元素,这样你只需修改现有记录,现有关系将保持。像

这样的东西
var myPerson = context.People.FindbyId(personId);
myPerson.Name = "Joe";
myPerson.Age = "20";

context.SaveAllChanges();