C# Data Extension Methodlar - ihan3t

ihan3t

Kadim Üye
7 Şub 2012
5,018
22
Bu konumda birçoğunuzun belki de bilmediği bir konu olan "data extension"
ları anlatacağım.

Nedir bu data extension dersek, var olan bir type a ait classa yeni method eklememizi sağlarlar.

Örnek bir durum oluşturacak olursak, geliştirdiğimiz projede stringler üzerinde sürekli işlem yaptığımızı düşünelim. İşlemimiz Türkçe karakterleri ingilizceye çevirmek olsun.

Data extension olmadan bu problemi şu şekilde çözeriz :

Kod:
public static string Cevir(string s){
            StringBuilder sb = new StringBuilder(s);
            return sb
                    .Replace("ş", "s")
                    .Replace("ç", "c")
                    .Replace("ğ", "g")
                    .ToString();
}


string turkce = "ihan3tçş";

string ingilizce = Cevir(turkce);

Bu işlemi birde data extension ile yapalım :

Kod:
 public static class DataExtensions{

        public static string Cevir(this string s){
            StringBuilder sb = new StringBuilder(s);
            return sb
                    .Replace("ş", "s")
                    .Replace("ç", "c")
                    .Replace("ğ", "g")
                    .ToString();
        }

    }

//main içerisinde

string turkce = "ihan3tçş";

string ingilizce =turkce.Cevir();

Burada yaptığımız işlem aslında var olan string tipindeki bütün nesnelere Cevir() metodunu eklemek oldu.

String classının içerisinde Cevir isimli bir metod yazmakla aynı işlem. Ama her zaman bir classın içerisinde metod ekleyemeyebilirsiniz. Kullanacağınız class harici bir kütüphaneden geliyor olabilir. Bu gibi durumlarda data extension çok faydalıdır.

Gerçek hayattan bir örnek vermek gerekirse, örneğin entity framework ile veritabanı sorgusu yaparken "nolock" ile sorgu atmak istiyorsunuz.
Bunun için IQueryable classına yönelik bir data extension yazarak veritabanı sorgusunu nolock ile çekmek isteyebiliriz, IsolationLevel ReadUncommitted yaparak bunu halledebiliriz.

Örnek bir kod olarak :

Kod:
public static List<T> WithNolock<T>(this IQueryable<T> query)
{
    using (var scope = new TransactionScope(
        TransactionScopeOption.Required, 
        new TransactionOptions() { 
            IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted }))
    {
        List<T> toReturn = query.ToList();
        scope.Complete();
        return toReturn;
    }
}

Burada yazdığımız data extension sayesinde entity framework sorgusu yaparken artık şunu yazabiliriz :

Kod:
List<User> users = dbContext.Users.Where(user => user.Id == 1).WithNolock();

Herkese iyi forumlar, ihan3t.

 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.