Entity Framework — многие ко многим — не сохраняется

#entity-framework #many-to-many

#entity-framework #многие ко многим

Вопрос:

У меня есть два объекта (объект A и объект B). У них есть отношения «многие ко многим».

Я использую общий уровень доступа к данным, который делает это:

 public virtual void Save(params T[] items)
{
  var keyName = GetIdKeyName<T>();

  foreach (T item in items.Where(GetByIdPredicate<T>(0, keyName).Compile()))
  {
    db.Entry(item).State = EntityState.Added;
  }

  foreach (T item in items.Where(GetByIdPredicate<T>(0, keyName, ExpressionType.NotEqual).Compile()))
  {
    db.Entry(item).State = EntityState.Modified;
  }

  db.SaveChanges();
}
  

Я хочу сохранить связь между объектом A и объектом B. Если я сделаю:

  ObjectA.ObjectBs.Add(ObjectB)
 dataAccess.Save(ObjectA)
  

Создается связь «многие ко многим», но она создает новый ObjectB. Я думал, это потому, что у него не было обновленного entitystate, поэтому я попробовал:

 dataAccess.Save(ObjectB)
ObjectA.ObjectBs.Add(ObjectB)
dataAccess.Save(ObjectA)
  

Но происходит то же самое. Есть идеи относительно того, как я могу обойти это?

Ответ №1:

Я нашел свою проблему. Я создавал экземпляр доступа к данным для каждого объекта. Поэтому, когда DataAccess сохранялся, он не знал о DataAccess. Я изменил уровень доступа, чтобы методы принимали тип, и все хорошо.