2009-04-22 7 views
7

Bu, Nested Database transactions in C# ile ilgilidir.SqlConnection.BeginTransaction ve TransactionScope'u karıştırabilir miyim?

İşlemde almak istediğim koleksiyondaki nesneler, SqlConnection.BeginTransaction yöntemini kullanarak kendi işlemlerini gerçekleştirir.

Bunu okuduktan sonra post Bunları karıştırıp karıştırmadığımı bilmiyorum. SQL Server 2005 kullanıyorum ve her nesne statik yapılandırma sınıfından bağlantı ayrıntılarını kullanır.

Bu konuda tecrübesi olan var mı? İşte

örnek kod:

using(TransactionScope scope = new TransactionScope()) 
{ 
    for (int i=0; i<=1000....) 
    { 
    SqlConnection con = new SqlConnection() 
    SqlCommand cmd = new SqlCommand("delete from ...", con); 

    try { 
     con.Open(); 
     DbTransaction t = con.BeginTransaction(); 
     cmd.ExecuteNonQuery(); 
     ... 
     cmd.CommandText = .... ; 
     cmd.ExecuteNonQuery(); 
     t.Commit ... 
    } 
    catch { 
     t.Rollback ... 
    } 
    con.Close() 
    } 
} 

Thx

cevap

5

MSDTC her iki makinelerde çalışmak için yapılandırmak için saat geçirdikten sonra nihayet ben kod test edebilir noktaya geldi.

O

Yukarıdaki sorun "eski" işlem sistemi veya eğer işlem yapma kurtulmak olamaz böylece kaynak koduna erişim olmayan kişiler için yararlı olabilir (1 veritabanı ile) çalışmak için görünür

kodun parçaları yerelleştirilmemiş veya benim durumumda olduğu gibi, üretim ortamında kararlı olduğu kanıtlanmış karmaşık kodla çok fazla uğraşmak istemezsiniz ama iç içe geçmiş işlemleri tanıtmanız gerekir ...

Farklı deneyiminiz varsa bana bildirin.

+0

Cevabınızı bu sorunun cevabı olarak işaretlemelisiniz - izin verilir! – Fenton

+1

Benim durumumda TransactionScope'a sarılmış "birim" testlerimiz var, böylece geliştirme makinelerimizde her bir test ve test sınıfı için karmaşık veritabanı manipulasyonları elde edemeyiz ve tüm bunları [teorik olarak] geri aldık. Aynı zamanda, üretim sunucularında MS DTC kullanımını zorunlu kılmıyoruz ve düzenli işlemlerde bir kaç varlık Entity Framework varlık manipülasyonunu sarmak istedim, böylece tüm işlem başarısız olursa geri dönüş yapabilir ... İdeal olarak TransactionScope çalışmaya devam etmeli ve iç işlem de ... – bambams