2012-03-28 24 views
1

Erstens, ist es möglich, n Transaktionen Ebenen über ADO.Net haben. Zweitens, ist diese korrekte Verwendung?Verschachtelte Transaktionen in ADO.NET

 var tx = cx.BeginTransaction(); 

     cx.Execute("insert into atable(id) values(123123)"); 

     var tx2=tx.BeginTransaction(); 

     cx.Execute("insert into atable(id) values(123127)"); 

     tx2.Commit(); 

     tx.Commit(); 

... usw.

+0

können Sie klären, warum möchten Sie dies tun? – daryal

+0

Warum verwenden Sie an erster Stelle verschiedene Transaktionen? Sie führen nur jeweils eine Aktion aus, und das ist bereits transaktional, entweder das Einfügen schreibt vor oder es tut es nicht. Was versuchst du zu erreichen? Es scheint, als ob Sie nur eine Transaktion für den gesamten Prozess benötigen. – PedroC88

+0

@ PedroC88: Dies ist nur ein Beispiel. Es ist einfacher, mit etwas Einfachem zu illustrieren. – sgtz

Antwort

4

Sie Nest-Transaktionen können TransactionScope mit - werden sie jedoch nur verpflichtet erhalten, sobald die äußere begangen wird.

Sie werden alle zurückgesetzt, wenn einer von ihnen zurückgesetzt wird.

In Bezug auf die Verwendung - Sie sollten die Transaktionserstellung in using Anweisungen wickeln, um die ordnungsgemäße Entsorgung zu gewährleisten.

using(var tx1 = new TransactionScope()) 
{ 
    cx.Execute("insert into atable(id) values(123123)"); 

    using(var tx2 = new TransactionScope()) 
    { 
     cx.Execute("insert into atable(id) values(123127)"); 
     tx2.Complete(); 
    } 

    tx1.Complete() 
} 
+0

sieht dann wie ein Verkäuferproblem aus. Vielen Dank. – sgtz

+0

fehlen Ihnen Konstruktorargumente zu TransactionScope? – sgtz

+0

@sgtz - Es hat einen leeren parameterlosen Konstruktor. Sie können jedoch mehrere verschiedene Parameter angeben, wenn Sie möchten. – Oded