Добавить город в существующую страну в EF (Entity Framework) - PullRequest
0 голосов
/ 12 апреля 2011

Примечание: 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 пытается вставить страну, а затем добавить к ней город, но я хочу добавить город к существующей стране.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

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

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

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

1 голос
/ 12 апреля 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...