EF Core : Explicit loading, Eager Loading ve Lazy Loading de Nedir?

Bilerek mi kullanıyoruz yoksa bilmeden mi kullanıyoruz yoksa daha kötüsü bundan haberimiz yok mu? :)

K. Murat Baseren
2 min readMay 11, 2024

Entity Framework Core (EF Core) kullanırken, ilişkili veri setlerini yükleme yöntemleri, verilerin nasıl ve ne zaman sorgulanacağını etkileyen önemli bir faktördür. Veri tabanından ilişkili verileri yükleme yöntemleri; Eager Loading, Lazy Loading ve Explicit Loading olarak üç ana başlıkta incelenebilir.

Eager Loading

Bir ana nesne sorgulanırken ilişkili nesnelerin de aynı sorgu içinde önceden yüklenmesi yöntemidir. Bu, genellikle Include() metodunu kullanarak gerçekleştirilir. Eager Loading, gereksiz yüklemeleri önlemek ve çok sayıda bağımsız sorgu göndermek yerine tek bir sorguda tüm gerekli verileri almaya yarar.

Örnek

Bir kitaplık uygulamasında, her bir kitabın yazar bilgilerini sorgularken, kitaplar ile yazarlar arasındaki ilişkiyi önceden yükleyerek gereken tüm verileri tek bir sorguda alabiliriz.

var books = context.Books
.Include(book => book.Author)
.ToList();

Bu örnekte, her kitap için ilişkili yazar bilgisi de sorguya dahil edilerek, kitap listesi çekilirken yazarlar da veri tabanından çekilir.

Lazy Loading

Bir nesnenin ilişkili nesnelerinin yalnızca o ilişkili nesnelere erişim sağlandığında yüklenmesi yöntemidir. Bu, performansı optimize etmek için kullanılır, çünkü sadece gerçekten ihtiyaç duyulan veriler yüklenir. Lazy Loading genellikle virtual anahtar kelimesi ile tanımlanmış ilişkili özellikler ve EF Core’un proxy mekanizması ile gerçekleştirilir.

Microsoft.EntityFrameworkCore.Proxies paketini projenize eklemeniz gerekmektedir.

Install-Package Microsoft.EntityFrameworkCore.Proxies

Örnek

Yine bir kitaplık uygulamasında, bir kitabın yazar bilgisine ancak o kitaba erişildiğinde ihtiyaç duyuluyor olsun.

var book = context.Books.Find(1); // Kitap bilgisi çekilir, yazar bilgisi henüz çekilmez.
var authorName = book.Author.Name; // Yazar bilgisine erişildiğinde, yazar bilgisi veritabanından yüklenir.

Bu örnekte, Author özelliği virtual olarak tanımlandığından, yazar bilgisi yalnızca kullanıldığında veri tabanından çekilir.

Explicit Loading

Geliştiricinin manuel olarak belirli bir zaman diliminde ilişkili nesneleri yüklemesi gerektiği durumlar için kullanılır. Load() metodu kullanılarak gerçekleştirilir ve geliştiriciye yüklemeler üzerinde tam kontrol sağlar.

Örnek

Bir müze uygulamasında, bir sanat eserinin yaratıcısının bilgileri sadece belirli koşullar altında yüklenmek istensin.

var artwork = context.Artworks.Find(1); // Sanat eseri bilgisi çekilir, yaratıcı bilgisi henüz çekilmez.
context.Entry(artwork)
.Reference(a => a.Creator)
.Load(); // Yaratıcı bilgisi manuel olarak yüklenir.

Bu örnekte, Creator bilgisi sadece gerekli olduğunda ve açıkça talep edildiğinde yüklenir.

Bu yükleme yöntemleri, uygulamanın ihtiyaçlarına ve veri erişim modellerine bağlı olarak kullanılır. Her biri farklı senaryolarda avantajlar ve dezavantajlar sunar.

--

--

K. Murat Baseren

Software Architect | .NET Developer | Project Manager | Instructor | Lifetime Learner