如何在實體框架中使用交易?

.net c# entity-framework visual-studio-2008 visual-studio-2010

如何在Entity Framework中使用事務?我在Stackoverflow上閱讀了一些鏈接: 使用Transactions或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表你可以看到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 ,實體框架將在單個事務中執行這些操作。

當您使用TransactionScope類時 ,您說“我希望在此塊中運行的內容被封裝在更大的事務中”,這確實是您所做的。

TransactionScope上調用Complete時,就是執行TransactionScope定義的TransactionScope封裝的所有操作的提交。


熱門答案

SaveChanges在交易中運作。如果無法保留任何臟的ObjectStateEntry對象,SaveChanges將回滾該事務並拋出異常。

來自文檔



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因