Возможно, вы создали новые экземпляры навигационных свойств в вашем классе устройств, которые уже загружены в контекст.Например,
device.Foo = new Foo { Id = 1 };
context.Devices.Attach(device);
Контекст может уже иметь экземпляр Foo
с Id=1
.Поэтому, когда вы присоединяете Device
, он также пытается присоединить Foo
, но не удается, потому что существует соответствующий экземпляр, который уже отслеживается контекстом.
Если возможно, попробуйте установить только скалярные свойства.
device.FooId = 1;
context.Devices.Attach(device);
Чтобы определить, загружен ли экземпляр Foo
var foo = context.ObjectStateManager
.GetObjectStateEntries(EntityState.Added | EtityState.Modified | EntityState.Unchanged)
.Select(s => s.Entity).OfType<Foo>().SingleOrDefault(f => f.Id == device.FooId);
if (foo != null)
{
// foo is loaded
}
Или проверьте, загрузил ли контекст навигационное свойство, и если это так, используйте этот экземпляр.