Я наткнулся на странную ошибку в моем коде. Это работало раньше, но теперь работает иногда.
Я использую EF6 для редактирования объекта с некоторыми отношениями. Чтобы не изменять отношения, я их прикрепляю (см. Пример кода).
public void EditA(A ThisIsA, B ThisIsB)
{
using (var Context = new LDZ_DEVEntities())
{
Context.As.Attach(ThisIsA);
var b = Context.Bs.FirstOrDefault(x => x.BId == ThisIsB.BId);
//var b = Context.Bs.Find(ThisIsB.BId);
if (b != null)
Context.Bs.Attach(b);
else
b = ThisIsB;
if (b.C != null)
Context.Cs.Attach(b.C);
ThisIsA.Bs.Add(b);
Context.SaveChanges();
}
}
Я редактировал имена, чтобы они были простыми.
Следующая строка
Context.Cs.Attach(b.C);
вызывает эту ошибку:
Прикрепление объекта типа 'C' не удалось, поскольку другой объект того же типа уже имеет одно и то же значение первичного ключа. Это может произойти при использовании метода "Прикрепить" или установки состояния объекта в "Без изменений" или "Модифицировано", если любые объекты на графике имеют конфликтующие значения ключей. Это может быть связано с тем, что некоторые объекты являются новыми и еще не получили значения ключей базы данных. В этом случае используйте метод "Добавить" или "Добавленное" состояние объекта для отслеживания графика, а затем установите состояние не новых объектов на "Без изменений" или "Модифицировано" по мере необходимости.
Эта строка была введена, поскольку все объекты C являются статическими объектами. Я никогда не хочу, чтобы C был создан. Если я удалю эту строку, каждый раз, когда я добавлю B в A; создается C. Что нежелательно.
Дополнительная информация:
A имеет список B's
B имеет один C
Этот метод EditA() вызывается в нескольких местах моего программного обеспечения. Эта ошибка появляется только при вызове метода в цикле (импорт). Во время работы над первой записью проблем нет. Но Im получает ошибку в записях после первого.
Я прочитал эти вопросы плюс ответы, но они не работали для меня: