Как использовать транзакцию в платформе Entity Framework?

Как использовать транзакции в Entity Framework? Я прочитал некоторые ссылки на Stackoverflow: Использование транзакций или SaveChanges (false) и AcceptAllChanges()?

НО; У меня 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);

Personel, Prim, Finans мои таблицы. Если вы посмотрите в таблицу 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;
    }
}

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

Ответ 1

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

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

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

Ответ 2

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

из документация