如何在实体框架中使用交易?

时间:2010-04-14 14:03:03

标签: c# .net visual-studio-2008 entity-framework visual-studio-2010

如何在Entity Framework中使用交易?我在Stackoverflow上阅读了一些链接:Using Transactions or SaveChanges(false) and AcceptAllChanges()?

BUT;我有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表,你可以看到Prim值float值如果我写一个文本框而不是浮点值我的事务必须运行。

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;
    }
}

我该怎么做?

3 个答案:

答案 0 :(得分:12)

当您调用SaveChanges时,实体框架将在单个事务中执行这些操作。

当您使用TransactionScope class时,您说“我希望在此块中运行的内容被封装在更大的事务中”,这确实是您所做的。

当您在TransactionScope上调用Complete时,就会执行TransactionScope定义的事务中封装的所有操作的提交。

答案 1 :(得分:1)

  

SaveChanges在交易中运作。如果无法保留任何脏ObjectStateEntry对象,SaveChanges将回滚该事务并抛出异常。

来自documentation

答案 2 :(得分:0)

有类似的example in the MSDN site