2011-01-17 4 views
3

Ich bin mit Enterprise-Bibliothek Datenzugriffsblock in meiner asp.net-Anwendung. Ich möchte die Transaktion von der Business-Logik-Ebene über mehrere gespeicherte Prozesse implementieren. Entlib öffnet eine neue Verbindung für den Datenbankzugriff. Führt die Verwendung des Transaktionsbereichs auf folgende Weise zu einer verteilten Transaktion?Wie Implementieren der Transaktion in Business-Logik-Schicht

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) 
{ 
    // calling necessary DAL methods 
    scope.Complete(); 
} 

Gibt es bessere Methoden, um eine Transaktion von BLL zu implementieren?

Antwort

0

Wenn Sie über SQL Server als Back-End sprechen, hängt es von der Server-Version ab. Hier ist ein guter Artikel: DO.NET and System.Transactions

Ich zitiere:

Die Transaction ist intelligent genug, um nicht vollständig verteilt Transaktion mit all seinem Kopf zu schaffen, wenn es notwendig ist. Wenn die Ressource , die an der Transaktion beteiligt ist, flüchtig ist, wird alles in Speicher bleiben und der Microsoft-Distributor Transaktionskoordinator (DTC) wird nicht beteiligt sein. Wenn die Ressource eine -Verbindung zu SQL Server 2005 ist, wird der DTC nicht beteiligt sein und SQL Server 2005 wird die Transaktion behandeln. Diese entspricht dem Öffnen einer internen SQL-Transaktion. Wenn SQL Server 2000 verwendet wird, wird es aufgelöst, eine vollständige DTC-Transaktion zu verwenden.

+0

Guter Artikel. Ich habe den Transaction.Current überprüft. TransactionInformation.DistributedIdentifier innerhalb des Transaktionsbereichs. Der Wert ist Guid.Empty {00000000-0000-0000-0000-000000000000} Also ich denke, die Transaktion bleibt leicht, obwohl ich mehrere Zugriffe auf den SQL-Server innerhalb der gleichen Transaktionsumfang tun. – developer