Rumah >pembangunan bahagian belakang >C++ >Bagaimana Bersemangat Memuatkan Semua Entiti Bersarang dalam Teras Rangka Kerja Entiti?

Bagaimana Bersemangat Memuatkan Semua Entiti Bersarang dalam Teras Rangka Kerja Entiti?

Linda Hamilton
Linda Hamiltonasal
2025-01-01 04:10:10962semak imbas

How to Eager Load All Nested Entities in Entity Framework Core?

Bersemangat Memuatkan Entiti Bersarang dengan Teras Rangka Kerja Entiti

Masalah:

Bersemangat memuatkan semua entiti berkaitan bersarang dalam Rangka Kerja Entiti Teras 2.0.1 telah terbukti mencabar. Khususnya, entiti bersarang, seperti Pelanggan dan Alamat untuk entiti Pesanan, kekal batal walaupun terdapat percubaan untuk memuatkannya.

Percubaan:

Pelbagai pendekatan telah dicuba tanpa kejayaan. , termasuk:

  • Menaik taraf kepada EF Core 2.1 dan menggunakan LazyLoadingProxies ditetapkan kepada palsu.

Penyelesaian:

Pada masa ini, tiada ciri terbina dalam EF Core untuk tidak sabar-sabar memuatkan semua entiti berkaitan bersarang secara lalai. Walau bagaimanapun, terdapat kaedah sambungan tersuai yang boleh menyediakan kefungsian ini:

public static IQueryable<T> Include<T>(this IQueryable<T> source, IEnumerable<string> navigationPropertyPaths)
    where T : class
{
    return navigationPropertyPaths.Aggregate(source, (query, path) => query.Include(path));
}

public static IEnumerable<string> GetIncludePaths(this DbContext context, Type clrEntityType, int maxDepth = int.MaxValue)
{
    // Omitted for brevity
}

Penggunaan:

public virtual async Task<IEnumerable<T>> GetAllAsync(Expression<Func<T, bool>> predicate = null)
{
    var query = Context.Set<T>()
        .Include(Context.GetIncludePaths(typeof(T));

    if (predicate != null)
        query = query.Where(predicate);

    return await query.ToListAsync();
}

Penggunaan ini menunjukkan kemasukan semua laluan berkaitan untuk jenis entiti yang ditentukan.

Atas ialah kandungan terperinci Bagaimana Bersemangat Memuatkan Semua Entiti Bersarang dalam Teras Rangka Kerja Entiti?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn