- 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 :
Bu işlemi birde data extension ile yapalım :
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 :
Burada yazdığımız data extension sayesinde entity framework sorgusu yaparken artık şunu yazabiliriz :
Herkese iyi forumlar, ihan3t.
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: