我正在使用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;}
}
答案 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();