21 Nisan 2013 Pazar

Entity Framework ile NOLOCK Kullanımı

Büyük projelerde CRUD işlemlerinde NOLOCK kullanmadığımızda aşırı derecede performans kaybına o sorguda sonucunun geç döndürmesine yol açar.
Kısaca NOLOCK'dan bahsedecek olursak tablo üzerinde CRUD işlemi yapıldığında ilgili satırda eğer bir işlem yapılıyorsa yada TRANSACTİON başlatılıp henüz kapanmamış ise o satırı sql kilitler ve sonucu bize döndürmez.Bundan dolayı o satırı kilitlemiş olur,yani  lock olmuştur,o satırla ilgili herhangi bir sonuç döndürmez.
Böyle bir sorun ile karşılaşmak istemiyorsak tabloların yanına nolock ekleriz bu sayede ilgili satırı lock olsa bile bize sonucu döndürür.
Tsql Nolock kullanımı: SELECT *  FROM Address nolock

Entity Framework'de Nolock kullanımı biraz farklı  TransactionScope kullanarak yapıyoruz.
Entity Framework Nolock kullanımı;

//Transaction ayarlarını tanımlıyoruzç

var tsOptions = new System.Transactions.TransactionOptions();
//Transaction IsolationLevel'i ReadUncommitted yapıyoruz,burası önemli nolock işlemini tanımlıyoruz burada.
tsOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;

using (var tScope = new System.Transactions.TransactionScope(System.Transactions.
TransactionScopeOption.Required, tsOptions))
{
    using (var context = new MyEntityConnection())
    {
        //kod bloğunuz...
    }
//Transaction işlemini kapatıyoruz.
    tScope .Complete();
}

Hiç yorum yok:

Yorum Gönder