Alper Konuralp

Kartınızı Oluşturun
Google+
Follow @alperkonuralp

Posts Tagged ‘Lazy Loading’

Entity Framework’te Include Metodu

Entity Framework Lazy Loading üzerinde çalışırken iç içe bağlantılarda problemler çıktı. Load ile çözüm bulamadığım bir anda Include Metodu ile problemim çözüldü.

Yine Northwind veri tabanınından örnek verecek olursak: Products tablosundan veriyi çektik, Order Details tablosuna ulaştık. Oradanda Orders tablosuna ulaşmak gerekiyorsa, Şu tür bir yazım çalışma zamanında hata ile karşılaşacaktır.

var product = DataContext.Products
        .Include("Order_Details")
        .Include("Orders")
        .First( x=> x.ProductID == 10);
var orderDetails = product.Order_Details.ToArray();

Bunun sebebi, Include belirtilen tabloda yer alan Navigation Properties içerisindeki tabloları yükleyebilir. Ama alt tablolardakileri yüklemek gerekiyorsa, o zaman aralarında “.” olacak şekilde, önce üst tablo ismini yazmak, sonrada alt tablo ismini yazmak gerekir. Doğru komut şu şekilde olmalıdır.

var product = DataContext.Products
        .Include("Order_Details")
        .Include("Order_Details.Orders");
        .First( x=> x.ProductID == 10);
var orderDetails = product.Order_Details.ToArray();

Entity Framework’te Tembellik (Lazy loading)

Entity Framework kullanmaya başladıktan sonra bazı problemler hasıl oldu. Linq to SQL’de, yüklediğimiz bir elemanın bağlı elemanlarını otomatik olarak yüklediği için ayrı bir çalışma yapmamıza gerek kalmıyordu. Mesela Elimizde Nortwind Veri tabanı varsa, bu tablodaki Products tablosundan bir elemanı şu şekilde alabiliyoruz.

var product = DataContext.Products.First( x => x.ProductID == 10);

Products Tablosu Order Details Tablosu ile bağlantılı olduğu için elimizdeki product elemanından bunun bağlı olduğu Order Details satırlarına şöyle ulaşabiliriz.

var orderDetails = product.Order_Details.ToArray();

Normalde bu şekilde orderDetails içinde veri olmasını bekleriz. Ancak EntityFramework Layz Loading(tembel yükleme) yi otomatik olarak çalıştırmamaktadır. Buda veriyi yüklemek için bizim birşeyler yapmamız gerekecektir. Bunun için 2 farklı yol kullanılabilir.

1. Include metodu ile beraber alınması istenilen tabloları belirlemek:

var product = DataContext.Products
    .Include("Order_Details")
    .First( x => x.ProductID == 10);
var orderDetails = product.Order_Details.ToArray();

2. Load Metodu ile lazım olduğunda verileri çekmek:

var product = DataContext.Products.First( x => x.ProductID == 10);
product.Order_Details.Load();
var orderDetails = product.Order_Details.ToArray();

Böylece Order Details yüklenmiş olur.

İzmir Yazılım Grubu
Google Groups
Subscribe to İzmir Yazılım Grubu
Email:
Visit this group
Mayıs 2012
Pts Sal Çar Per Cum Cts Paz
« Şub    
 123456
78910111213
14151617181920
21222324252627
28293031  
Yeni Downloadlar
StatPress
Visits today: 99
Sahip oldugum diger adresler :
3dmaxtraining.info
3dmaxtrainings.com
3dmaxtrainings.info
adobelearning.info
adobelearnings.info
adobetrainings.com
adobetrainings.info
autocadbootcamp.info
autocadexams.info
autodesklearning.info
autodesklearnings.com
autodesklearnings.info
ciscotrainings.info
egepro.com
elonunbahcesi.com
elonunbahcesi.info
flashbootcamp.info
flashexams.com
flashexams.info
konuralp.biz
konuralp.org
mayatutorial.info
mayatutorials.info
microsoftexams.info
microsofttrainings.info
proege.com
sharepointlearning.info
sharepointlearnings.com
sharepointlearnings.info
sharepointtutorial.info
silverlightbootcamp.info
silverlightlearning.info
silverlightlearnings.info
silverlighttraining.info
silverlighttrainings.com
silverlighttrainings.info
silverlighttutorial.info
silverlighttutorials.info
sirasende.info
urunbul.info
yagmurca.com
yagmurca.info