10

如何在實體框架中使用事務?我讀了一些鏈接Stackoverflow:Using Transactions or SaveChanges(false) and 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 my tables。如果你看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; 
    } 
} 

我該怎麼做?

+0

他們使用3個不同的上下文....你試圖獨立保存每個表? – Nix 2010-04-14 14:27:00

+2

你已經有了代碼,你需要什麼幫助? – nos 2010-04-14 14:33:28

+0

是的,我想添加3表,但交易我必須 – programmerist 2010-04-14 15:00:17

回答

12

當您撥打SaveChanges時,實體框架將在單個事務中執行這些操作。

當您使用TransactionScope class時,您會說「我想要在此塊中運行的內容在更大的事務中進行封裝」,這實際上就是您要做的。

當您在TransactionScope上調用Complete時,執行由TransactionScope定義的事務中封裝的所有操作。

1

SaveChanges在一個事務中運行。如果無法保留任何髒的ObjectStateEntry對象,則SaveChanges將回滾該事務並引發異常。

documentation