在EF(实体框架)中将城市添加到现有国家

时间:2011-04-12 06:26:35

标签: c# entity-framework

注意:EF尝试插入国家/地区然后将城市添加到其中但我想将城市添加到现有的国家/地区。

City city = new City(); 
city.Country = Country.CreateCountry(CountryId); 
Entities.AddToCity(city); 
Entities.SaveChanges();

这段代码有什么问题? 我想将一个国家的城市插入数据库。 “(VS2008SP1)” 这个国家已经存在。

Exception = {"Cannot insert duplicate key row in object 'dbo.TBL#MadrakeTahsili' with unique index 'IX#MadrakeTahsiliName'.\r\nThe statement has been terminated."}

定义是

City Table(Id int,FK_Country int,name nvarchar(50))
Country Table(Id int,name nvarchar(50))

身份(自动增量)中的城市和国家/地区中的ID

注意:EF尝试插入国家/地区然后将城市添加到其中但我想将城市添加到现有的国家/地区。

2 个答案:

答案 0 :(得分:2)

我不知道Country.CreateCountry(CountryId);的作用,但无论如何,需要通过EF上下文从数据库中获取现有国家

也就是说,实体框架知道您想要使用现有国家/地区,您需要通过dbContext“获取”它然后将其分配给城市。这样Country实体将被“附加”,EF将不会尝试创建新实体。

反过来也应该有效:从数据库中获取国家/地区并将City添加到Country而不是Country添加到City

答案 1 :(得分:1)

与Sergi一样,您应首先从您的上下文中检索国家/地区,然后将新城市添加到其中。

在伪代码中:

using (YourEntities context = getYourContextHere())
{
var countryEntity = context.CountryEntitySet.FirstOrDefault(country => country.id == newCityCountryId);

if (countryEntity == null)
  throw new InvalidOperationException();

CityEntity newCity = createYourCityEntity();
newCity.Country = countryEntity;

context.SaveChanges();
}

这样的事情应该有用。