EntityFramework Core navigation property ler üzerinden modelinizin ilişkili olduğu varlıkları da yüklemenizi sağlar. Bu işlemi yapmak üzere tasarlanmış 3 temel ORM kalıbı bulunur.
• Eager Loading : ilişkili verinin ilk sorgunun bir parçası olarak yüklenmesi
• Explicit Loading : ilişkili veri daha sonra veri tabanından expilicty (açıkça) yüklenmesi
• Lazy Loading : Siz navigation property’e başvuru yaptığınızda verinin database den yüklenmesi. Ben bu yazıyı yazdığımda EF Core 2.0 versiyonunda ve halen lazy loading senaryosunun olması gerekip gerekmediğine karar veremediler. Takip etmek isteyenler buradan

Ben bu makalede yalnızca eager loading üzerine bir kaç şeyden bahsedeceğim. Vakit bulabilirsem daha fazlasını da devam yazıları ile bloga eklerim.

Ayrıca konu ile ilgili şuradan github’taki güzel örneğe ulaşabilirsiniz.

Eager Loading

Include metodu ile sorgu sonuçlarınıza ilişkili verileride yükleyebilirsiniz. Örneğin

using (var context = new BloggingContext())
{
 var blogs = context.Blogs
 .Include(blog => blog.Posts)
 .ToList();
}
 

birden fazla ilişkili veiyide sorgu sonucuna dahil etmeniz mümkün o da şu şekilde

 
using (var context = new BloggingContext())
{
 var blogs = context.Blogs
 .Include(blog => blog.Posts)
 .Include(blog => blog.Owner)
 .ToList();
}

Peki multi level ilişkiler nasıl olacak? (İlişkili verinin ilişkili verisi)

Onuda bu şekilde halledebiliriz.

 
using (var context = new BloggingContext())
{
 var blogs = context.Blogs
 .Include(blog => blog.Posts)
 .ThenInclude(post => post.Author)
 .ToList();
}

Dikkat!

Visual Studio intellisense özelliğinde bulunan bir issue kaynaklı navigation property görünmeyebilir ya da syntax hatası varmış gibi görünebilir. Siz property adını doğru şekilde yazarsanız derlediğinizde sorunsuz çalıştığını görebilirsiniz.