【发布时间】:2012-04-16 10:34:16
【问题描述】:
我在实体框架中遇到外键关系问题。我有两张桌子:Persons 和 Countries。 Persons 有一个指向 CountryId 的外键列。
由于Countries 表很少更改,我只想获取它的数据一次,处理DatabaseContext,并将Countries 的列表缓存在某处。这就是我遇到问题的地方。
实体框架似乎希望您打开数据库上下文,根据需要添加/编辑行,然后关闭数据库上下文。如果打开,获取数据,关闭;然后稍后打开,保存数据,关闭;有问题。
所以我的 POCO 对象如下所示:
public class Country {
public int CountryId {get; set; }
public String Name {get; set; }
}
public Person {
public int PersonId {get; set; }
public virtual Country Country {get; set; }
}
然后,我尝试像这样创建一个新人:
Country[] countries;
using (var dt = new DatabaseContext())
{
countries= dt.Countries.ToArray();
}
Person person = new Person();
person.Country = countries[0];
using (var dt = new DatabaseContext()) {
dt.Entities.Add(person);
dt.SaveChanges();
}
保存时,实体框架在Countries 表中创建一个与countries[0] 同名的新行,但新的递增ID。这显然不是预期的结果 - 该人应该将其 Country_CountryId 字段设置为 countries[0] 的 id,并且不应创建新行。
我该如何解决这个问题?我认为一种解决方案是强制实体框架不在给定一个已经设置了主键的对象时创建一个新行。有没有办法做到这一点?
【问题讨论】:
标签: c# entity-framework ef-code-first