2015-02-12 4 views
3

Я разрабатываю компонент, в котором я использую Entity Framework 4.0.Несоответствие EntityFramework и TransactionScope

В конкретном сценарии мне нужно использовать TransactionScope.

try 
{ 
    using (TransactionScope t = new TransactionScope()) 
    { 
     myEntity.MyObjectsOne.Add(new MyObjectOne()); 
     myEntity.MyObjectsTwo.Add(new MyObjectTwo()); 

     myEntity.SaveChanges(); 

     throw new Exception(); 

     t.Complete(); 
    } 
} 
catch (Exception e) 
{ 
    // What should I do? 
} 

Когда операция терпит неудачу, и, таким образом, оно не завершено, MyEntity все равно будет отражать изменения, сделанные т.е. добавление MyObjectOne и MyObjectTwo.

В таком случае, что является лучшей практикой, во избежание несогласованности?

+0

Каков срок службы контекста? – ken2k

+0

Тот же экземпляр контекста по-прежнему будет использоваться после этого процесса. – JEPAAB

ответ

5

Обычный способ сделать то, что вам нужно сделать, это удалить и перезагрузить объект из свежего в блоке catch, чтобы, если область не была должным образом зафиксирована, ваш объект перезагружается, как и до того, как было применено какое-либо изменение Это.

увидеть этот вопрос и все ответы на более подробную информацию: Undo changes in entity framework entities

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