Sobes.tech
Middle

C#-də əlaqəli varlıqların yüklənməsi necə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

C# dilində əlaqəli varlıqları yükləmək tez-tez ORM kitabxanaları, məsələn, Entity Framework Core vasitəsilə həyata keçirilir. Əsas yanaşmalar:

  • İstəkli (Eager) yükləmə: Əlaqəli məlumatlar əsas varlıq ilə birlikdə bir verilənlər bazası sorğusunda yüklənir.
    // Include metodundan istifadə etməklə istəkli yükləmə
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Açıq (Explicit) yükləmə: Əlaqəli məlumatlar əsas varlıq əldə edildikdən sonra açıq şəkildə yüklənir.
    // Əsas varlığın alınması
    var post = context.Posts.Find(1);
    
    // Əlaqəli şərhlərin açıq yüklənməsi
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Yalnızca naviqasiya xüsusiyyətləri üçün .Reference() .Collection() yerinə istifadə olunur.
    // Əlaqəli müəllifi açıq yükləmə
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazımi (Lazy) yükləmə: Əlaqəli məlumatlar ilk dəfə müraciət edildikdə avtomatik yüklənir. Proxy siniflərinin konfiqurasiyası və ya asılılıq injeksiyası tələb edir və bəzi ORM-lərdə standart davranışdır.
    // Lazımi yükləmə aktivləşdirilibsə
    var post = context.Posts.Find(1);
    // Comments-ə müraciət yükləməni tetikler
    int commentCount = post.Comments.Count;
    
    Entity Framework Core-da Microsoft.EntityFrameworkCore.Proxies paketinin quraşdırılması və .UseLazyLoadingProxies() çağırılması DbContext konfiqurasiyasında vacibdir. Naviqasiya xüsusiyyətləri virtual kimi elan edilməlidir.

Yöntəm seçimi istifadə ssenarisindən və performans (sorğu sayı) ilə yüklənən məlumat həcmi arasında kompromisə bağlıdır.