注意: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尝试插入国家/地区然后将城市添加到其中但我想将城市添加到现有的国家/地区。
答案 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();
}
这样的事情应该有用。