У меня есть сущность "A", которая имеет свойство навигации ICollection, которое содержит коллекцию объектов "B".
Предположим, что база данных содержит объект "A1", а его свойство коллекции содержит 3 объекта: "B1, B2, B3".
Теперь у меня есть в коде отдельно стоящий объект "A1", свойство которого содержит отдельные элементы "B3, B4".
Возможно ли связать объект "A1" с контекстом и отметить, что свойство Collection также должно быть обновлено? (объекты B1, B2 должны быть удалены, необходимо добавить объект B4)
Я попробовал следующее, но не обновил свойство навигации (Collection) (обновлены только свойства скаляров):
context.Entry(A1).State = EntityState.Modified;
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();
}
вы должны использовать Attach, который будет рекурсивно присоединять вас к объекту
context.As.Attach(A1);
где As - это DbSet, открытый контекстом.
context.Set<TA>().Attach(A1);
также будет делать ТА с типом A1.