Entity Framework обновляет дочерние элементы при обновлении parent - PullRequest
1 голос
/ 11 ноября 2011

Я отправляю и родителю, и его дочерним элементам обновление на мой сервисный уровень.

Модель настроена следующим образом:

public class Parent
{
    public int ParentId { get; set; }
    public ICollection<Child> Children;
}

public class Child
{
    public int ChildID {get; set;}
    public virtual Parent Parent{get;set}
    public virtual int ParentId{get; set;}
    public string FirstName { get; set; }
}

Мне нужно поведениечто дочерние элементы всегда привязаны к родителю, поэтому, если дочерний элемент находится в базе данных, которая не найдена присоединенной, мы должны удалить ее.Если его не существует, создайте его.Если он существует, обновите его.

Как мне выполнить это без написания кода, чтобы все эти вызовы выполнялись вручную?Как удалить все, а затем снова добавить все.

1 Ответ

2 голосов
/ 11 ноября 2011

Вам не нужно удалять все дочерние элементы и повторно добавлять их (что может быть проблемой в любом случае, если у вас есть, например, другие объекты в базе данных, которые ссылаются на одного из дочерних элементов, который вы хотите обновить только. Удаление и повторное-добавление это приведет к нарушению ограничения внешнего ключа).

То, что вам действительно нужно сделать, более сложно: (

Необходимо загрузить исходный граф объектов в базу данных, а затем проверить дочерний элементпо дочернему элементу, если он был удален, если он новый или уже существует.

Вот пример, который совершенно точно соответствует вашей модели:

Связь не может бытьизменено, потому что одно или несколько свойств внешнего ключа не могут иметь значения NULL

Entity Framework не поддерживает обновление графа объектов в базе данных с помощью графа обособленных объектов.обновляет скалярные и сложные свойства. Для них вы можете использовать ApplyCurrentChanges (для ObjectContext) или Entry(entity).CurrentValues.SetValues (для DbContext). Последний используется в связанном экзаменеОбновите скалярные свойства родителя и каждого ребенка.Но обновление отношений между сущностями - это ручная задача.

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