Question

nous pouvons utiliser SQL comme ceci:

SELECT * FROM student WITH(NOLOCK);

Comment puis-je obtenir cela avec LINQ to SQL sans l'utilisation d'un TransactionScope?

Était-ce utile?

La solution

LINQ to SQL ne dispose d'aucun mécanisme de le faire, mais vous pouvez créer une transaction avec un niveau d'isolation spécifique. Regardez le code ci-dessous:

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

    using (var transaction = con.BeginTransaction(
        IsolationLevel.ReadUncommitted))
    {
        using (var context = new SchoolDataContext(con))
        {
            // HACK: Setting the context.Transaction is 
            // needed in .NET 3.5 (fixed in .NET 4.0).
            context.Transaction = transaction;
            var q = from s in context.Students select c;
        }
    }
}

Parfois, en utilisant ce type d'isolement est utile, à savoir pour des raisons de performance. Mais s'il vous plaît assurez-vous ne faites pas créer, mettre à jour ou supprimer des opérations (CUD) en utilisant ce type d'isolement de base de données. Il dépend bien sûr de votre situation, mais vos données pourraient obtenir dans un état incohérent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top