3

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

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

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

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

3 回答 3

5

首先,您需要将现有附加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);
于 2012-08-28T10:42:28.497 回答
0

您需要在保存之前将您的设置StatePersonCategoryUnchangedPerson

于 2012-08-28T10:41:13.333 回答
0

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

var myPerson = context.People.FindbyId(personId);
myPerson.Name = "Joe";
myPerson.Age = "20";

context.SaveAllChanges();
于 2012-08-28T10:51:55.647 回答