2009-08-12 14 views
1

Kann ich wissen, ob Spring.Net Unterstützung für Linq2SQL eingebaut hat? Jemand im Spring.Net-Forum erwähnt, dass es eine Brücke für NHibernate gibt. Allerdings könnte ich NHibernate überhaupt nicht verwenden. Ich suche direkte Unterstützung für Linq2Sql.Spring.Net Unterstützung für Linq2SQL

Wenn ich TxScopeTransactionManager verwende und attributbasierte Transaktion auf eine Geschäftsmethode anwenden, die zwei linq2sql-Aufrufe enthält, handelt es sich dann um eine lokale Transaktion oder eine Eskalation zu einer verteilten Transaktion?

Antwort

2

Ich würde vorschlagen, ConnectionUtils und seine GetConnectionTxPair Methode zu verwenden. Es gibt eine Datenbankverbindung und eine Transaktion als Anhang zurück. Wenn Sie einen Verweis auf eine Transaktion haben, können Sie LINQ2SQL DataContext explizit in dieses Objekt aufnehmen, indem Sie einfach Transaction Eigenschaft dieses Kontextes setzen.

können Sie erweitern AdoTemplate LINQ2SQL zu unterstützen:

public delegate T DataContextDelegate<T>(DataContext command); 

public class LinqAdoTemplate : AdoTemplate 
{ 
    public virtual T Execute<T>(DataContextDelegate<T> del) 
    { 
     ConnectionTxPair connTxPair = ConnectionUtils.GetConnectionTxPair(DbProvider); 

     using (var context = new DataContext(connTxPair.Connection)) 
     { 
      //downcast is a bit smelly here 
      //one can throw exception though when connTxPair.Transaction is of invalid type 
      context.Transaction = connTxPair.Transaction as DbTransaction; 

      return del(context); 
     } 
    } 
} 

Dann können Sie Spring.NET konfigurieren Sie diese in Ihre AdoTemplate-fähige Objekte zu injizieren.

+0

Schöne Antwort, ich mochte Ihren [Blogbeitrag] (http://mkarczewski.wordpress.com/2012/09/13/spring-net-linq-to-sql-transactions-support/) zu diesem Thema auch lesen . – Marijn