Bilmek istediğin her şeye ulaş

Linq To Sql

Formatting of continuation data will be changing soon. To continue using the current formatting, use the 'rawcontinue' parameter. To begin using the new format, pass an empty string for 'continue' in the initial query.

Haziran 2014

Kadircebel, bir soruya yanıt verdi.

Veritabanı tablolarının ilişkisel karmaşıklığı ya da ilişkili tabloların çokluğu linqtosql sorgulamalarının performansına Ado.net e göre daha fazla negatif etkisi olur mu?

Veritabanı dizaynı önemli tabiki. Ama linq2sql sonuçta disconnected bir yapı. Olay tamamı ile benim görüşüm veritabanı tasarımına bakıyor. Sonuçta linq2sql ile siz verilerde işlem yaparken nesnesel olarak işlem yapıyorsunuz yani ado.net teki gibi veri üzerinde direk oynamıyorsunuz.
Mart 2014

Hakan Köse, bir soruya yanıt verdi.

LINQ to SQL'i performans açısından nasıl değerlendirirsiniz?

LINQ kullanım açısından, ilk kullanıma sunulduğu zaman gerçekten inanılmaz bir zaman kazancı sağladı. Eskiden veri tabanı ile bir iş yapmak için sadece SQL sorgusu yapmıyorduk, ayrıca bu sorguları güvenli ve yüksek performans ile gerçekleyebilmek için bir sürü kod yazmak gerekiyordu. Yani yazılımcı olarak en azından (aslında başka bir uzmanlık alanı olan) T-SQL bilmek gerekiyordu. LINQ yapısı ile sizin elle yazamayacağınız SQL sorguları bile otomatik olarak arka planda çok zeki biçimde dönüştürülüyor.

Eksileri yok mu? Elbette var ama bu eksikler gideriliyor. Microsoft LINQ üzerindeki desteğini çekti ancak bunu duyurduğunda aynı yapı üzerine kurulu ve daha stabil olan Entity Framework (EF) geliştiriliyordu ve LINQ kullananların zaman içinde Entity Framework'e geçmelerini önerdiler. EF, LINQ'nun geliştirilen hali diyebiliriz. Yapı olarak aynılar.

Performans konusuna gelirsek, LINQ ve EF yapı itibari ile, yazdığınız sorguyu ADO.NET sorgusu haline dönüştürür ve sorguyu gerçekleştirir. Yani, yazdıklarınız birer veri tabanı sorgusu haline dönüştürülüp işletilir. En nihayetinde arkada koşan işlem bir ADO.NET yapısıdır. O sebeple performans olarak çok büyük bir farklılık hissetmezsiniz. Bu konuda uzun zaman önce Microsoft Turkey Developer Support Team'den teknik biri ile konuşmuş ve aynı soruları sormuştum. Yazdıklarım ile aynı şeyi söylemişti ve demişti ki "Kendinizi hangisi ile daha rahat kod yazar hissediyor iseniz onu kullanın, tümü arka planda ADO.NET üzerine kuruludur".

O sebeple, avantajları açısından bakarsak hem LINQ hem de EF inanılmaz kolaydır ve size çok zaman kazandırır. Geliştirme zamanınızdan %45-50 tasarruf edebilirsiniz. Performans olarak ise, dikkat etmeniz gereken 1-2 nokta var; Lazy Loading ve Eager Loading denen sorgu hataları. Bu hem LINQ hem de EF için geçerli bir durum. Esasen temel sebebi ise ya yazdığınız sorgunun yanlış olması ya da veri tabanı tasarımınızda bir terslik olma ihtimali.

Kısaca, doğru bir veri tabanı tasarımı ve doğru yaılmış sorgular ile birlikte LINQ ve EF ile yapamayacağınız şey yoktur.

NOT: Performansı sorun edebilmeniz için gerçekten çok detaylı bir proje gerçekleştiriyor olmalısınız. Eğer projeniz küçük çapta sayılabilecek bir proje ise performansla ilgili neredeyse hiç fark hissetmezsiniz. Tabi yapıyı doğru kurduysanız.
Ekim 2012

Hakan Köse, bir soruya yanıt verdi.

Linq to Sql deki LoadWith() ve AssociateWith() arasındaki farklar nelerdir?

LINQ to SQL'de LoadWith() bir tablo ile bağlı bir diğer tablonun koşulsuz birlikte hazır hale getirilmesini sağlar. Örnek verecek olursak;


DataLoadOptions dlo = new DataLoadOptions();
db.LoadOptions = dlo;
dlo.LoadWith<Customer>(c => c.Orders);


Örnekte betimlenen durum veritabanında bulunan Customer record'larını bağlı olan Order recordlar ile beraber yüklenmesini sağlar. Ancak, burada Customer'ın tüm Order'ları yüklenir.

AssociateWith() için ise durum biraz daha farklıdır. Bir tablo ve bu tablodaki veriye bağlı bulunan başka tablodaki verilerin koşullu olarak yüklenmesini, yani filtrelenerek yüklenmesini sağlar. Örnek verecek olursak;


DataLoadOptions dlo = new DataLoadOptions();
dlo.AssociateWith<Customer>(c => c.Orders.Where(p => p.ShippedDate != DateTime.Today));
db.LoadOptions = dlo;


Örnekte betimlenen durum; Customer'ların Order'ları ile birlikte yüklenmesini açıklamaktadır, ancak tüm Order'lar değil, ShippedDate'i Today olmayan kayıtlar istenmektedir.

LoadWith ve AssociateWith fonksiyonları bize LINQ to SQL sorgusunu daha esnek olarak kullanabilme imkanı sağlar.

Eylül 2012

Ahmet Faik  yeni bir  gönderide  bulundu.

Özellikle "ApplyCurrentValues" özelliğine dikkat çekmeye çalıştım.

Foreign Keys in the Entity Framework - Entity Framework Design - Site Home - MSDN Blogs

Haziran 2012

Hakan Köse, bir soruya yanıt verdi.

Linq to Sql kullanarak join işlemi nasıl yapılır?

Aslında bunun için Join Statement yazmana gerek yok, LINQ bunu senin için SQL'e dönüştürürken yapıyor zaten:


//Products ve Versions tabloların olduğunu 
//ve bunların birbirine bağlı olduğunu varsayıyorum.

var results = from p in db.Products
where p.ProductId == 3
select new
{
Product = p,
VersionItems = p.Versions
};

Bu sorgu sonucunda, results içinde bir döngü ile dönerseniz her row için bir product ve bu product'ın versiyonlarının bilgisini taşıyan VersionItems property'sini görebilirsiniz.


NOT: LINQ sorgularında bağlı tablolardan veri çekerken Lazy Loading ve Eager Loading kavramlarına dikkat ediniz.


101 LINQ Samples belki size LINQ sorgularının yapısı konusunda bir fikir verebilir:


code.msdn.microsoft.com/101-lınq-samples-3fb9811b


Güncelleme:

Yukarıdaki sorguda, içerdeki VersionItems içine de where ekleyebilirsin:


var results = from p in db.Products
where p.ProductId == 3
select new
{
Product = p,
VersionItems = p.Versions.Where(x => x.VersionId > 3)
};


Haziran 2012

Ahmet Faik  yeni bir  gönderide  bulundu.

-

Link to Everything: A List of LINQ Providers

Charlie Calvert's C# Community Blog
Şubat 2012

Hakan Köse  yeni bir  gönderide  bulundu.

LINQ to SQL kullanarak, SQL Serverdan Server saatinin alınması için iyi bir yöntem.

LINQ to SQL Get DateTime from Sql Server (getDate) | Spyriadis Network

Ever wanted to get the current time and date from the SQL Server to avoid different times between yous server and the clients

17 kişi

Konunun Takipçileri

Alt Konu Başlıkları

Henüz bu konu başlığı ile ilgili konular bulunmuyor.