2015-04-22 3 views
1

В потоке 1 у меня есть:отсоединение объект из всех открытых контекстов

MyDbContext contextInstance1 = new MyDbContext(); 
var entity = contextInstance1.EntityDbSet.First(); 
// Some work with the entity goes here.... 

И в потоке 2:

//The entity is passed as an argument from thread 1 
contextInstance2.EntityDbSet.Attach(entity); 
contextInstance2.EntityDbSet.Remove(entity); 

И я получаю следующее сообщение об ошибке:

Субъект объект не может ссылаться на несколько экземпляров IEntityChangeTracker.

Если я удаляю строку Attach(), у меня есть ошибка, говорящая, что сущность не может быть удалена перед первым подключением.

Я понимаю, что мне нужно делать, но я не вижу, как это сделать в этой ситуации. Моя проблема в том, что я не имею ссылки на (и не знаю) contextInstance1 в thread2.

Поэтому я ищу способ отделить объект от 1-го контекста, прежде чем присоединять его к другому контексту. Если EF знает, что существует другой экземпляр контекста, должен быть способ доступа к нему, вот что мне нужно.

+0

http://stackoverflow.com/questions/18925111/turn-off-ef -change-tracking-for-any-instance-of-the-context, это поможет –

+0

Я надеюсь, что потоки не будут проходить параллельно? –

+0

Почему? =/Они, вероятно, делают. – reddy

ответ

0

Вы могли бы попытаться отделить объект в contextInstance1 перед передачей лица на contextInstance2, как это:

MyDbContext contextInstance1 = new MyDbContext(); 
var entity = contextInstance1.EntityDbSet.First(); 
// Some work with the entity goes here.... 
contextInstance1.Entry(entity).State = EntityState.Detached; 
+0

Я не могу этого сделать, DDD, модель домена является ненасытной;) Вызывающие находятся в модели домена. – reddy

Смежные вопросы