1

Есть ли способ реализовать транзакции в коде сначала без необходимости записи хранимых процедур?Атомные транзакции в Entity Framework 4.1 Код Сначала без хранимых процедур

У меня есть некоторые сценарии, в которых необходимо создать записи с несколькими таблицами с уникальными подсказками до того, как будет создана окончательная запись в таблице. Это что-то, что я могу кодировать с помощью EF?

ответ

2

DbContext.SaveChanges() способ использует сделку. Так что это Atomic, и вы не хотите использовать хранимые процедуры. Пакет unitOfWork реализован в EF для достижения этого.
Но допустим, что вы используете два DbContext экземпляров в д вашей работы, то вам нужно обернуть свою работу с областью сделки, как это,

using (var scpe=new TransactionScope()){ 
... 
context1.SaveChanges(); 
.... 
context.SaveChanges(); 

scope.Complete(); 
} 

SaveChanges работает в рамках транзакции. SaveChanges откатит эту транзакцию и выдаст исключение, если какой-либо из грязных объектов ObjectStateEntry не может быть сохранен.

See the documentation

+0

(1) Вы имеете в виду, что DbContext.SaveChanges() по своей сути реализует атомарность без нас того, чтобы явно указать? В таком случае мы можем отключить его? –

+1

(2) Кроме того, я не совсем понял ваш код для двух баз данных. Сфера транзакций, как представляется, объявлена ​​как независимый объект. Как оба объекта контекста знают, что они находятся в пределах одной области? –

+0

На самом деле не обращайте внимания на мой второй комментарий. Я не знал о транзакциях .NET ambient и читаю на них. –