2011-04-12 7 views
0

注:EFは国を挿入して都市を追加しようとしますが、既存の国に都市を追加します。EFで現存する国に都市を追加する(Entity Framework)

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

エラーを書き込むことができますか? – Bastardo

答えて

2

私はCountry.CreateCountry(CountryId);が何をするか分からないが、いずれにせよ、あなたEFコンテキストを介してデータベースから既存の国を取得する必要があります。

つまり、Entity Frameworkは、既存の国を使用してdbContextを介して取得し、それを都市に割り当てる必要があることを認識します。そうすれば、Countryエンティティは「接続」され、EFは新しいエンティティを作成しようとしません。

逆も同様です:DBから国を取得し、CountryからCityの代わりにCountryCityを追加してください。

1

Sergiに言われているように、まずあなたのコンテキストから国を取得してから新しいCityを追加する必要があります。擬似コードで

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

のようなものが動作するはずです。

関連する問題