在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尝试插入一个国家,然后将城市添加到它,但我想将城市添加到一个存在的国家
我不知道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();
}