Ender
Gökay

tjutg simzb

Entity Framework ile NOLOCK

16 March 2010 12:22

Bildiğiniz gibi Entity Framework'ün oluşturduğu sorgular ekstra bir ayar yapmazsanız, varsayılan olarak NOLOCK parametresi olmadan oluşturuluyor. Ancak özellikle büyük çaplı projelerde, saniyede onlarca CRUD işleminin yapıldığı tablolarda NOLOCK olmadan çalışmak büyük performans kayıplarına yol açabiliyor.

Peki Entity Framework ile NOLOCK içeren sorgular nasıl oluşturuyoruz derseniz, cevabımız TransactionScope. IsolationLevel'ini ReadUncommitted olarak ayarladığımız yeni bir TransactionScope yaratıp, sorgumuzu bunun içinde oluşturuyoruz.

using (var context = new Entities())
{
     TransactionOptions transactionOptions = new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted };

     using (var transaction = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
     {
          var result = context.TableName;
     }
}

Burada dikkat etmemiz gereken tek bir nokta var, eğer SQL Server Profiler ile incelerseniz bu oluşturduğumuz sorgunun NOLOCK içermediğini göreceksiniz. Yaptığımız işlemin etkisini sorgumuzdan hemen önceki satırda göreceğiniz Audit Login'in muhtemelen son satırında göreceğiniz "set transaction isolation level read uncommitted" satırında göreceksiniz. Yani yarattığımız bu transaction boyunca, sunucuya atacağımız bütün sorgular NOLOCK parametresini içeriyormuş gibi davranacak.

Sonuç olarak NOLOCK içeren sorgular yaratmak bir iki satır fazla kod yazmaktan geçiyor. Peki alternatif yollar yok mu? Efektif bir çözüm olmasa da, dilerseniz NOLOCK içeren Stored Procedure'ler yazıp Entity Framework'den Funciton olarak bu SP'leri çağırabilirsiniz.

Yorum ekle


 

  Country flag

biuquote
  • Yorum
  • Canlı önizleme
Loading



BlogEngine.NET 1.4.5.0

Son Yorumlar

Comment RSS