Entity Framework Code-First: как присоединить сущность и изменить свойство типа коллекции?

1

У меня есть сущность "A", которая имеет свойство навигации ICollection, которое содержит коллекцию объектов "B".

Предположим, что база данных содержит объект "A1", а его свойство коллекции содержит 3 объекта: "B1, B2, B3".

Теперь у меня есть в коде отдельно стоящий объект "A1", свойство которого содержит отдельные элементы "B3, B4".

Возможно ли связать объект "A1" с контекстом и отметить, что свойство Collection также должно быть обновлено? (объекты B1, B2 должны быть удалены, необходимо добавить объект B4)

Я попробовал следующее, но не обновил свойство навигации (Collection) (обновлены только свойства скаляров):

context.Entry(A1).State = EntityState.Modified;
Теги:
entity-framework

2 ответа

0
            using (var ctx = GetContext())
            {
                int[] ids = ctx.Bs.Select(x => x.Id).ToArray();
                foreach (Bs b in A1.BsCollection)
                {
                    if (!ids.Contains(b.Id))
                        ctx.Bs.Add(b);
                    else if(...){ ... }
                }
                ctx.As.Attach(A1);
                ctx.Entry(A1).State = EntityState.Modified;
                ctx.SaveChanges();
            }
0

вы должны использовать Attach, который будет рекурсивно присоединять вас к объекту

context.As.Attach(A1);

где As - это DbSet, открытый контекстом.

context.Set<TA>().Attach(A1);

также будет делать ТА с типом A1.

  • 0
    Я использую метод Attach. Он прекрасно работает для подключенного объекта и связанных объектов в отношении «один ко многим». В моем случае отношение между «A» и «B» является «многие ко многим» (обе сущности имеют коллекции друг друга). Кажется, что в таком случае EF просто игнорирует отношение «многие ко многим».

Ещё вопросы

Сообщество Overcoder
Наверх
Меню