2011-04-12 57 views
0

注:EF嘗試插入國家,然後將城市添加到該國家但我想將城市添加到存在的國家。在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)) 

標識在城市和鄉村表中標識(自動遞增)

注:EF試圖插入一個國家,然後這個城市添加到它,但我想把城市添加到一個現有的國家。

+0

你能寫出錯誤嗎? – Bastardo 2011-04-12 06:30:00

回答

2

我不知道是什麼Country.CreateCountry(CountryId);做,但在任何情況下,你需要通過EF背景獲得從數據庫中已有的國家。

也就是說,Entity Framework知道您想使用現有的國家,您需要通過您的dbContext「獲取」它,然後將其分配給城市。這樣Country實體將「附加」,EF不會嘗試創建新的實體。

反向也應該起作用:從DB獲取國家並將City添加到Country而不是CountryCity

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

類似的東西應該工作。