Буду признателен за любые советы.Обновить модель с вложенной коллекцией, ASP.NET MVC
Я искал правильный подход к изменению коллекции, но не уверен, что является лучшим.
Я сущность с вложенной коллекции:
public class Customer
{
//customer properties
ICollection <Address> Addresses{get; set;}
}
Мой Edit
вид на Customer
включает Addresses
, а также, т.е. пользователь добавляет адреса динамически, и вся коллекция передается в контроллер по форме submittion. В контроллере я обновить Customer
, как обычно:
Context.Entry(customer).State = EntityState.Modified;
А также я должен обновить коллекцию Address
:
customer.Addresses.ToList()
.ForEach(p =>
Context.Entry(p).State = EntityState.Modified);
Он отлично работает до тех пор пока я добавить новую запись в Addresses
. Поскольку он не существует в БД, сохранение вызывает ошибку.
Я знаю, что могу проверить, существует ли запись в БД - изменить, в противном случае - добавить.
Но есть проблема в объекте Address
. Это первичный ключ, например ID
, является Identity, то есть автоматически увеличивается при добавлении в DB.
Итак, изначально в коллекции нового Address
будет ID
, равного 0
. Затем, если добавить один Address
в контексте, то, прежде чем добавить еще один, я проверяю, если второй Address
в контексте, он возвращает истину, потому что первый из них также с ID
= 0.
Кроме того, в порядке, Я могу удалить всю коллекцию и добавить ее снова, но это может повлиять на производительность.
Итак, я был бы так благодарен за ваши советы.
Что делать, если некоторые из записей удалены? Проверить оставшиеся в БД существующие в текущей коллекции? Я надеялся, что есть более элегантное решение. –
Entity Framework удалит удаленные записи из вашей базы данных. – masterw