Добавить город в существующую страну в EF (Entity Framework)

#c# #entity-framework

#c# #entity-framework

Вопрос:

Примечание: 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'.rnThe statement has been terminated."}
  

определение

 City Table(Id int,FK_Country int,name nvarchar(50))
Country Table(Id int,name nvarchar(50))
  

Идентификатор в таблице City и Country в Identity (автоматическое увеличение)

Примечание: EF пытается вставить страну, а затем добавить к ней город, но я хочу добавить город в страну, которая существует.

Комментарии:

1. можете ли вы записать ошибку?

Ответ №1:

Я не знаю, что Country.CreateCountry(CountryId); делает, но в любом случае вам нужно получить существующую страну из базы данных через контекст EF.

То есть, чтобы Entity Framework знала, что вы хотите использовать существующую страну, вам нужно «получить» ее через ваш DbContext, а затем назначить ее городу. Таким образом, Country объект будет «прикреплен», и EF не будет пытаться создать новый.

Должно сработать и обратное: получить страну из базы данных и добавить City в Country вместо Country в City .

Ответ №2:

Как упоминал Серджи, вы должны сначала извлечь страну из вашего контекста, а затем добавить к ней новый город.

В псевдокоде:

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

Что-то подобное должно сработать.