Sobes.tech
Middle

C#те байланыштуу объекттерди жүктөө кандай болот?

sobes.tech AI

AIден жооп

C# тилинде байланышкан объекттерди жүктөө көбүнчө ORM китепканалары, мисалы, Entity Framework Core аркылуу жүргүзүлөт. Негизги жактар:

  • Eager (кечиктирилген) жүктөө: Байланышкан маалыматтар негизги объект менен бирге бир суроо аркылуу жүктөлөт.
    // Include методу аркылуу eager жүктөө
    var postsWithComments = context.Posts
                                   .Include(p => p.Comments)
                                   .ToList();
    
  • Explicit (ачык) жүктөө: Байланышкан маалыматтар негизги объект алгандан кийин ачык түрдө жүктөлөт.
    // Негизги объектти алуу
    var post = context.Posts.Find(1);
    
    // Байланышкан комментарийлерди ачык жүктөө
    context.Entry(post)
           .Collection(p => p.Comments)
           .Load();
    
    Жалгыз навигациялык мүнөздөмөлөр үчүн .Reference() колдонулат, .Collection() ордуна.
    // Байланышкан авторду ачык жүктөө
    context.Entry(post)
           .Reference(p => p.Author)
           .Load();
    
  • Lazy (кечиктирилген) жүктөө: Байланышкан маалыматтар автоматтык түрдө биринчи кайрылууда жүктөлөт. Proxy конфигурациясын жана көзкарандылык инъекциясын талап кылат жана кээ бир ORM'дерде негизги жүрүм-турум.
    // Lazy жүктөө иштетилгенде
    var post = context.Posts.Find(1);
    // Commentsке кайрылуу жүктөөнү иштетет
    int commentCount = post.Comments.Count;
    
    Entity Framework Core'до Microsoft.EntityFrameworkCore.Proxies пакети орнотулушу жана .UseLazyLoadingProxies() чакырылышы керек. Навигациялык мүнөздөмөлөр virtual деп жарыялануусу керек.

Кайсы ыкманы тандоо колдонуу сценарийине жана иштөө (суроолор саны) менен жүктөлгөн маалымат көлөмүнүн ортосундагы компромисске көз каранды.