6
votes

Comment implémenter cette commande pour empêcher les blocages avec LINQ à SQL?

Je voudrais implémenter définir le niveau d'isolation de transaction lire non engagés dans mon projet qui utilise LINQ vers SQL. Ma compréhension est que cela affectera toutes les instructions de sélection globale.

Dois-je mettre cela dans mon DAL qui contient l'objet contextuel? Si oui, comment?

merci! Mark


0 commentaires

4 Réponses :


1
votes

Essayez de paramétrer la lecture d'un instantané engagé sur la base de données complète.

Voir ici: http://www.codinghorror.com/blog/ 2008/08 / Deadocked.html


0 commentaires

1
votes

Linq, à proprement parler, n'est pas une langue de requête de base de données. C'est une langue de requête de domaine pouvant être traduite dans une langue de requête DB comme SQL. En tant que tel, vous ne pouvez pas utiliser que LINQ pour définir un niveau d'isolation de la base de données.

Je regarderais les outils que votre ormes vous donne; La plupart, à un certain niveau, impliquent une SQLConnection et des SQLTransactions de style ADO. Vous devriez pouvoir exposer ceux-ci étant donné l'objet "Session" de votre OrM, afin de définir des niveaux d'isolation et d'exécuter d'autres commandes de base de données non DML.


0 commentaires

2
votes

Vous pouvez le faire sur un paramètre DataContext CODE> / UNITÉ DE TRAVAIL SIMS:

using (var con = new SqlConnection(constr))
{
    con.Open();

    using (var tran = 
        new con.BeginTransaction(IsolationLevel.ReadUncommitted))
    {
        using (var db = new MyDataContext(con))
        {
            // You need to set the transaction in .NET 3.5 (not in 4.0).
            db.Transaction = tran;

            // Do your stuff here.

            db.SubmitChanges();
        }

        tran.Commit();
    }
}


0 commentaires

1
votes

J'aime les idées de cet article pour créer une classe de base qui définira le niveau d'isolement de la transaction souhaité pour vous. À mon avis, cette fonctionnalité aurait dû être incluse dans le cadre.

http://www.codeproject.com/kb/linq/linq_transactions.aspx


0 commentaires