2009-08-12 8 views
1

Spring.NetにLinq2SQLのサポートが組み込まれているかどうか分かりますか?誰かがSpring.NetフォーラムにNHibernate用の橋があると言いました。しかし、私はNHibernateをまったく使用しないかもしれません。私はLinq2Sqlの直接のサポートを探しています。Linq2SQLのSpring.Netサポート

TxScopeTransactionManagerを使用し、2つのlinq2sql呼び出しを含むビジネスメソッドに属性ベースのトランザクションを適用する場合、トランザクションはローカルトランザクションか分散トランザクションにエスカレートされますか?

答えて

2

ConnectionUtilsとそのGetConnectionTxPairメソッドを使用することをお勧めします。 データベース接続とトランザクションのペアを返します。トランザクションへの参照がある場合、このコンテキストにTransactionプロパティを設定するだけで、LINQ2SQL DataContextを明示的にこのトランザクションに登録できます。

あなたはLINQ2SQLをサポートするためにAdoTemplateを拡張することができます

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

次に、あなたのAdoTemplateアウェアオブジェクトにこれを注入するSpring.NETを設定することができます。

+0

素敵な答え、私はこの件についてもあなたの[ブログ投稿](http://mkarczewski.wordpress.com/2012/09/13/spring-net-linq-to-sql-transactions-support/)を読んでいるのが好きでした。 – Marijn