Sobes.tech
Middle

C# da bog'liq bo'lgan ob'ektlarni qanday yuklash amalga oshiriladi?

sobes.tech AI

AIdan javob

C# tilida bog'liq bo'lgan ob'ektlarni yuklash ko'pincha ORM kutubxonalari, masalan, Entity Framework Core yordamida amalga oshiriladi. Asosiy yondashuvlar:

  • Eager (tez) yuklash: Bog'liq ma'lumotlar asosiy ob'ekt bilan birga bitta ma'lumotlar bazasi so'rovi bilan yuklanadi.
    // Include metodidan foydalanib tez yuklash
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Explicit (aniq) yuklash: Bog'liq ma'lumotlar asosiy ob'ekt olgach, aniq ravishda yuklanadi.
    // Asosiy ob'ektni olish
    var post = context.Posts.Find(1);
    
    // Bog'liq sharhlarni aniq yuklash
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Yagona navigatsiya xususiyatlari uchun .Reference() .Collection() o'rniga ishlatiladi.
    // Bog'liq muallifni aniq yuklash
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazy (sekin) yuklash: Bog'liq ma'lumotlar birinchi marta murojaat qilganda avtomatik ravishda yuklanadi. Proxy sinflarini sozlash yoki bog'liqliklarni in'ektsiya qilishni talab qiladi va ba'zi ORMlarda standart xulq.
    // Lazy yuklash yoqilgan bo'lsa
    var post = context.Posts.Find(1);
    // Comments ga murojaat qilish yuklashni chaqiradi
    int commentCount = post.Comments.Count;
    
    Entity Framework Core'da Microsoft.EntityFrameworkCore.Proxies paketini o'rnatish va .UseLazyLoadingProxies() ni DbContext konfiguratsiyasida chaqirish zarur. Navigatsiya xususiyatlari virtual sifatida e'lon qilinishi kerak.

Yondashuv tanlovi foydalanish holatiga va ishlash (so'rovlar soni) bilan yuklanadigan ma'lumot hajmi o'rtasidagi kompromissga bog'liq.