0

Работа над проектом с использованием Entity Framework (4.3.1.0). Я пытаюсь понять, как заставить мой код работать как транзакцию, но для меня кажется, что моя модель не обновляется после того, как транзакция завершилась неудачно.Entity Framework - модель не обновляет после неудачной транзакции

Позвольте мне показать вам:

using (TransactionScope trans = new TransactionScope()) 
{ 
    _database.Units.Add(new Unit{ ... }); 
    var a = false; 
    if (a) 
    { 
     trans.Complete(); 
     Refresh(); 
    } 
} 

Refresh(); 

Что я переживаю, что после того, как TransactionScope закончено оно не откат в предыдущее состояние. Когда я запускаю метод обновления, я перебираю все элементы в единицах и вставляю значения в ObservableCollection, которые я показываю на экране в окне WPF.

Этот механизм работает, когда я успешно выполняю транзакцию, но когда я запускаю приведенный выше код, сетка обновляется с недавно добавленным модулем, но после выполнения Refresh после транзакции он не исчезает.

У меня есть ощущение, что я делаю что-то здесь не так fundamentaly :)

ответ

2

Entity Framework не поддерживает транзакции для в памяти сопровождаемых лиц - его «ObjectStateManager», который вы видите в ObjectContext не транзакционный ресурс. TransactionScope только «применяется» к операциям (запросам, обновлениям) базы данных, выполняемым внутри него, а не к операциям в памяти, таким как манипулирование графиком объекта (что вы и делаете).

+0

ОК. Это многое объясняет. Могу ли я как-то сказать EF, что мне нужно выполнить синхронизацию с базой данных для всех или для какой-либо таблицы? Я имею в виду, было бы идеально, если бы я мог просто обновить таблицу _database.Units. – AndersLindas

+0

Не совсем. В примере кода в случае отката вы можете отделить вновь добавленные entites и запросить базу данных для всех Units с [OverwriteChanges] (http://msdn.microsoft.com/en-us/library/system.data .objects.mergeoption.aspx). – cynic

+0

Спасибо. Думаю, я смогу обойти это сейчас. Кроме того, я использую Code First и DbContext вместо ObjectContext. Но нашел ссылку [link] (http://thedatafarm.com/blog/data-access/accessing-objectcontext-features-from-ef-4-1-dbcontext/), которая была полезной для доступа к ObjectContext. – AndersLindas

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