Come usare CON (NOLOCK) in LINQ to SQL?
-
19-09-2019 - |
Domanda
siamo in grado di utilizzare SQL proprio come questo:
SELECT * FROM student WITH(NOLOCK);
Come posso raggiungere questo obiettivo con LINQ to SQL senza l'uso di un TransactionScope
?
Soluzione
LINQ to SQL non ha alcun meccanismo di fare questo, ma è possibile creare una transazione con un livello di isolamento specifica. Guardate il codice qui sotto:
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;
}
}
}
A volte usando questo tipo di isolamento è utile, cioè per motivi di prestazioni. Ma assicurarsi di non fare alcuna creare, aggiornare o eliminare le operazioni (CUD) che utilizzano questo tipo di isolamento di database. E, naturalmente, dipende dalle situazioni, ma i dati potrebbe ottenere in uno stato incoerente.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow