Вы на самом деле не опубликовали код, который имеет отношение к ошибке, но я могу объяснить причину ошибки.
В Entity Framework есть средство отслеживания изменений, что означает, что контекст БД имеет вид " секретный словарь "сущностей, о которых он знает, который он использует как кеш для сокращения вызовов базы данных и отслеживания того, что вы делаете, и не изменяет эти сущности. Эти сущности хранятся и на них ссылаются в трекере изменений с использованием их первичного ключа.
Entity Framework может хранить только один объект заданного типа и заданного значения PK. Он не может отслеживать два разных объекта, которые имеют одинаковое значение.
Думайте об этом, как будто это словарь, который может хранить только одно значение для данного значения ключа. Словарь успешно перезаписывает одно значение другим, но вместо этого EF отказывается это сделать, поскольку это очень вероятно приведет к непредвиденному поведению и затруднит устранение ошибок.
Следующий код выдаст ту же ошибку, что и вы ' Вы испытываете:
using(var db = new MyContext())
{
Foo foo1 = new Foo() { Id = 123 };
Foo foo2 = new Foo() { Id = 123 }; // different object in memory, same PK identifier
db.Foos.Attach(foo1);
db.Foos.Attach(foo2); // exception!
}
Я не могу сказать вам, где в вашем коде вызывается эта ошибка, поскольку вы не опубликовали код, в котором это может происходить.