Как использовать транзакции в 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);
Персонал, Прим, финансирует мои столы. Если вы посмотрите таблицу Prim, то увидите значение с плавающей точкой значения Prim, если я напишу текстовое поле, а не значение с плавающей точкой, моя транзакция должна выполняться
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;
}
}
Как я могу это сделать?
Когда вы делаете вызов SaveChanges
, Entity Framework будет выполнять эти операции в одной транзакции.
Когда вы используете класс TransactionScope
, вы говорите: «Я хочу, чтобы то, что выполняется в этом блоке, было инкапсулировано в большую транзакцию», что на самом деле и делает.
Когда вы вызываете Complete
для TransactionScope
, это то, что выполняет фиксацию всех операций, инкапсулированных в транзакции, определенной TransactionScope
.
SaveChanges работает в рамках транзакции. SaveChanges откатит эту транзакцию и выдаст исключение, если какой-либо из грязных объектов ObjectStateEntry не будет сохранен.
из документации