2009-08-12 7 views
1

Puis-je savoir si Spring.Net a pris en charge Linq2SQL? Quelqu'un sur le forum Spring.Net a mentionné qu'il y a un pont pour NHibernate. Cependant, je ne pourrais pas utiliser NHibernate du tout. Je suis à la recherche d'un support direct pour Linq2Sql.Prise en charge de Spring.Net pour Linq2SQL

Si j'utilise TxScopeTransactionManager et que j'applique une transaction basée sur des attributs à une méthode commerciale qui contient deux appels linq2sql, la transaction sera-t-elle une transaction locale ou transférée vers une transaction distribuée?

Répondre

2

Je suggère d'utiliser ConnectionUtils et sa méthode GetConnectionTxPair. Renvoie une paire de connexion à la base de données et une transaction associée. Lorsque vous avez référence à la transaction, vous pouvez explicitement enrôler LINQ2SQL DataContext dans ceci en définissant simplement la propriété Transaction de ce contexte.

Vous pouvez étendre AdoTemplate pour soutenir LINQ2SQL:

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

Ensuite, vous pouvez configurer Spring.NET pour injecter dans vos objets AdoTemplate-conscients.

+0

Bonne réponse, j'ai aimé lire votre [article de blog] (http://mkarczewski.wordpress.com/2012/09/13/spring-net-linq-to-sql-transactions-support/) sur ce sujet aussi . – Marijn

Questions connexes