10

Как использовать транзакции в Entity Framework? Я прочитал несколько ссылок на Stackoverflow: Using Transactions or SaveChanges(false) and AcceptAllChanges()?Как использовать транзакцию в платформе Entity Framework?

НО; У меня 3 таблицы, поэтому у меня есть 3 объекта:

CREATE TABLE Personel 
(PersonelID integer PRIMARY KEY identity not null, 
Ad varchar(30), 
Soyad varchar(30), 
Meslek varchar(100), 
DogumTarihi datetime, 
DogumYeri nvarchar(100), 
PirimToplamı float); 

Go 

create TABLE Prim 
(PrimID integer PRIMARY KEY identity not null, 
PersonelID integer Foreign KEY references Personel(PersonelID), 
SatisTutari int, 
Prim float, 
SatisTarihi Datetime); 

Go 

CREATE TABLE Finans 
(ID integer PRIMARY KEY identity not null, 
Tutar float); 

Персонал, Прим, Финансирует мои столы. Если вы посмотрите в таблицу Prim, вы можете увидеть значение float Prim value, если я пишу текстовое поле, не плавающее значение, которое должна выполнить моя транзакция.

using (TestEntities testCtx = new TestEntities()) 
{ 
    using (TransactionScope scope = new TransactionScope()) 
    { 
     // do something... 
     testCtx.Personel.SaveChanges(); 
     // do something... 
     testCtx.Prim.SaveChanges(); 
     // do something... 
     testCtx.Finans.SaveChanges(); 
     scope.Complete(); 
     success = true; 
    } 
} 

Как я могу это сделать?

+0

они используют 3 разных контекста .... вы пытаетесь сохранить каждую таблицу самостоятельно? – Nix

+2

У вас уже есть код, с чем вам нужна помощь? – nos

+0

да, я хочу добавить 3 таблицы, но транзакции я должен – programmerist

ответ

12

Когда вы делаете вызов SaveChanges, Entity Framework выполнит эти операции в одной транзакции.

Когда вы используете TransactionScope class, вы говорите: «Я хочу, чтобы выполняемые в этом блоке инкапсулированные в большую транзакцию», что и есть то, что вы делаете.

Когда вы вызываете Complete на TransactionScope, это то, что выполняет совершение всех операций, заключенных в транзакцию, определяемых TransactionScope.

1

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

из documentation

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