У меня есть действие
[HttpPost]
public string Edit(Member member)
и член имеет коллекцию дочерних объектов ICollection<AgeBracket> AgeBrackets
.
В настоящее время я получаю все A geBrackets
, связанные с участником, отмечаю всех как удаленных, затем перебираю новую коллекцию и создаю новую запись для каждого. Затем я обновляю свою родительскую сущность. Это работает, но должен быть лучший способ сделать это:
например, если бы я написал SQL
, я мог бы удалить всех существующих потомков одной строкой
DELETE FROM AgeBrackets WHERE MemberId = @MemberId
В моей ситуации он делает выбор для извлечения существующих элементов, затем генерирует удаление для каждого из них, затем генерирует вставку для каждого нового дочернего элемента и затем генерирует обновление для родителя.
Вот как выглядит мой код:
IList<AgeBracket> ageBrackets = db.AgeBrackets.Where<AgeBracket>(x => x.MemberId == member.MemberId).ToList();
foreach (AgeBracket ab in ageBrackets)
db.Entry(ab).State = EntityState.Deleted;
if (member.AgeBrackets != null)
foreach (AgeBracket ab in member.AgeBrackets)
{
ab.MemberId = member.MemberId;
db.AgeBrackets.Add(ab);
}
db.Entry(member).State = EntityState.Modified;
Изначально я пытался опросить существующих детей и сравнить каждого из них с новым набором, но это кажется слишком сложным.
Каков наилучший способ обновить участника и всех его детей?