#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. Я изменил уровень доступа, чтобы методы принимали тип, и все хорошо.