У меня есть объект, который я пытаюсь выполнить обновление с помощью Entity Framework 5.EF Обновление аффилированной таблицы вставка вместо обновления
После того, как я получить существующий объект и перейти на обновление полей, он правильно обновляет базовый объект «тренер», но не обновляет объект Address и вместо этого вставляет его снова, вместо того, чтобы обновлять его с помощью нового первичного ключа, даже если ему был передан существующий первичный ключ для повторного использования.
Любая помощь приветствуется.
Ниже упрощенных вниз версия кода:
using (AltairEntities context = new AltairEntities())
{
dtlCoach coach = context.dtlCoaches.FirstOrDefault(x => x.CoachID == coachId);
coach.Name = "Bob";
coach.Description = "sample";
coach.dtlCoachAddresses.Add(PrepareAddress(coach.dtlCoachAddresses.First().CoachAddressID));
context.Database.Connection.Open();
context.Entry(coach).State = EntityState.Modified;
context.SaveChanges();
}
public static dtlCoachAddress PrepareAddress(int existingId)
{
dtlCoachAddress newAddress = new dtlCoachAddress();
try
{
newAddress.CoachAddressID = existingId;
newAddress.AddressLine1 = "Line 1";
newAddress.AddressLine2 = "Line 2";
return newAddress;
}
catch (Exception ex)
{
throw ex;
}
}
UPDATE: Так что я нашел, если я кормлю существующий dtlCoachAddress объект внутри объекта dtlCoach в функцию PrepareAddress в качестве параметра вместо того, чтобы объявить объект как новый, он корректно обновляется. В чем разница между объектом dtlCoachAddress от объекта и объектом dtlCoachAddress, определенным из new, если я передаю ему все те же параметры? Но два определяют, будет ли объект вставлен или обновлен?
Для упрощения вашей проблемы «тренер» обновляется правильно. Нет проблем в этом объекте. Вы также хотите добавить новый «адрес». И затем верните его к «тренеру». Но это не работает. Это правильно? –
Я хочу обновить адрес, а не добавить новый и сохранить ссылку на тренера. – Cyassin
Я бы получил адрес из адресной таблицы вместо создания нового объекта, а затем назначил его тренеру. – Tarik