Konteks:
Apabila tidak sabar-sabar memuatkan entiti berkaitan dalam Entiti Teras Rangka Kerja, pengguna mungkin menghadapi masalah apabila entiti bersarang kekal tidak berpenghuni. Isu ini memerlukan kemasukan manual bagi setiap entiti berkaitan, yang menjadi tidak praktikal untuk perhubungan entiti yang kompleks.
Masalah:
Pengguna memerlukan cara untuk memuatkan secara automatik semua yang berkaitan bersarang entiti dalam Rangka Kerja Entiti Teras 2.0.1, menghapuskan keperluan untuk kemasukan eksplisit menggunakan Include() dan ThenInclude().
Penyelesaian:
Sambungan Tersuai:
Memandangkan ciri ini tidak disokong secara asli dalam Teras EF 2.0.1, kaedah sambungan tersuai boleh digunakan:
public static partial class CustomExtensions { 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) { // Implementation for recursive traversal and path collection } }
Penggunaan dalam Repositori Generik:
Dalam kaedah GetAllAsync() repositori generik, sambungan GetIncludePaths() boleh digunakan untuk menentukan dan memasukkan secara automatik semua entiti berkaitan:
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(); }
Tambahan Nota:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Secara Automatik Bersemangat Memuatkan Semua Entiti Bersarang dalam Rangka Kerja Entiti Teras 2.0.1?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!