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

本文关键字:一个 国家 城市 EF 添加 实体 框架 | 更新日期: 2023-09-27 17:49:41

注意: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))

Identity(Auto Increment)中城市和国家表中的Id

注意:EF尝试插入一个国家,然后将城市添加到它,但我想将城市添加到一个存在的国家

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

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

也就是说,为了让实体框架知道你想使用一个现有的国家,你需要通过dbContext"获取"它,然后将它分配给城市。这样,Country实体将被"附加",EF将不会尝试创建一个新的。

反向也应该工作:从DB中获取国家并将City添加到Country而不是将Country添加到City

就像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();
}