Entity Framework обновляет две таблицы с отношением один ко многим

Сначала я использую код EF для управления своими данными. У меня две модели, ElectricitySite и ElectricitySiteSplit.

ElectricitySite содержит List<ElectricitySiteSplits> ElectricitySiteSplits, это отношение один ко многим.

Я пытаюсь написать свой метод обновления для слоя репозитория, который будет работать с обеими таблицами, пока у меня есть:

public void UpdateElectricitySite(ElectricitySite updatedElectricitySite)
{
    var dbElectricitySite = GetElectricitySite(updatedElectricitySite.ElectricitySiteId);

    _context.ElectricitySites.Attach(updatedElectricitySite);
    _context.Entry(updatedElectricitySite).State = EntityState.Modified;

    _context.SaveChanges();
}

Я получаю следующую ошибку, когда я нажимаю кнопку Сохранить:

Не удалось присоединить сущность типа MySolution.Repo.ElectricityModels.ElectricitySiteSplit, поскольку другая сущность того же типа уже имеет такое же значение первичного ключа. Это может произойти при использовании метода «Прикрепить» или при установке состояния объекта на «Без изменений» или «Изменение», если какие-либо объекты на графике имеют конфликтующие ключевые значения. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей, сгенерированные базой данных. В этом случае используйте метод «Добавить» или состояние объекта «Добавлено», чтобы отслеживать график, а затем установите состояние не новых объектов на «Без изменений» или «Изменено» в зависимости от ситуации.

Я думаю, это потому, что я не прикрепил свой объект ElectricitySiteSplit, однако, если я добавлю это ниже моего приложения ElectricitySites:

_context.ElectricitySiteSplits.Attach(updatedElectricitySite.SiteSplits);

Я получаю эту ошибку:

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS1503 Аргумент 1: невозможно преобразовать System.Collections.Generic.List в UtilityBilling.Repo.ElectricityModels.ElectricitySiteSplit.

Как мне обрабатывать обновление таблицы ElectricitySiteSplits, которое содержится в updatedElectrcitiySite.SiteSplits в виде списка.

FYI - я уже посмотрел здесь:

Entity Framework 5 Обновление записи

https://msdn.microsoft.com/en-gb/data/jj592676.aspx


person JsonStatham    schedule 04.02.2016    source источник
comment
Не могли бы вы зациклить их? так прикрепить каждый? - Но у вас могут быть, в зависимости от вашего кода, новые SiteSplits, поэтому их нужно будет добавлять, а не прикреплять?   -  person David McLean    schedule 04.02.2016
comment
GetElectricityState включает в себя ElectricityStates? если это так, они находятся в контексте при извлечении, и их не нужно снова прикреплять (если только они не покинули ChangeTracker, и в этом случае их нужно получить снова).   -  person DevilSuichiro    schedule 04.02.2016
comment
Да, расщеплений может быть больше или меньше, существующие тоже могли быть изменены.   -  person JsonStatham    schedule 04.02.2016


Ответы (1)


EF не обрабатывает обе таблицы автоматически. Я должен указать, какой элемент был добавлен/обновлен/удален. Взгляните на этот поток Чистое обновление иерархии в Entity Framework< /а>

Надеюсь это поможет!

person Fabio Luz    schedule 04.02.2016