10

Cách sử dụng giao dịch trong Khung thực thể? Tôi đã đọc một số liên kết trên Stackoverflow: Using Transactions or SaveChanges(false) and AcceptAllChanges()?Cách sử dụng Giao dịch trong khung thực thể?

NHƯNG; tôi có 3 bảng để tôi có 3 thực thể:

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. Nếu bạn nhìn vào bảng Prim, bạn có thể thấy giá trị float của giá trị Prim nếu tôi viết một giá trị textbox không float mà giao dịch của tôi phải chạy.

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

Tôi làm như thế nào?

+0

họ sử dụng 3 ngữ cảnh khác nhau .... bạn đang cố lưu từng bảng một cách độc lập? – Nix

+2

Bạn đã có mã, bạn cần trợ giúp với điều gì? – nos

+0

vâng tôi muốn thêm 3 bảng nhưng giao dịch tôi phải – programmerist

Trả lời

12

Khi bạn thực hiện cuộc gọi đến SaveChanges, Khuôn khổ thực thể sẽ thực hiện các hoạt động đó trong một giao dịch duy nhất.

Khi bạn sử dụng TransactionScope class, bạn đang nói "Tôi muốn những gì chạy trong khối này được đóng gói trong giao dịch lớn hơn", đó thực sự là những gì bạn làm.

Khi bạn gọi Complete trên TransactionScope, đó là những gì thực hiện cam kết của tất cả các hoạt động được đóng gói trong giao dịch được xác định bởi TransactionScope.

1

SaveChang hoạt động trong giao dịch. SaveChanges sẽ quay trở lại giao dịch đó và ném một ngoại lệ nếu bất kỳ đối tượng ObjectStateEntry bẩn nào không thể tiếp tục tồn tại.

từ documentation

Các vấn đề liên quan