Работа над проектом с использованием 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 :)
ОК. Это многое объясняет. Могу ли я как-то сказать EF, что мне нужно выполнить синхронизацию с базой данных для всех или для какой-либо таблицы? Я имею в виду, было бы идеально, если бы я мог просто обновить таблицу _database.Units. – AndersLindas
Не совсем. В примере кода в случае отката вы можете отделить вновь добавленные entites и запросить базу данных для всех Units с [OverwriteChanges] (http://msdn.microsoft.com/en-us/library/system.data .objects.mergeoption.aspx). – cynic
Спасибо. Думаю, я смогу обойти это сейчас. Кроме того, я использую Code First и DbContext вместо ObjectContext. Но нашел ссылку [link] (http://thedatafarm.com/blog/data-access/accessing-objectcontext-features-from-ef-4-1-dbcontext/), которая была полезной для доступа к ObjectContext. – AndersLindas