首頁 >後端開發 >C++ >如何在 Entity Framework Core 2.0.1 中有效率地預先載入嵌套實體?

如何在 Entity Framework Core 2.0.1 中有效率地預先載入嵌套實體?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-26 05:13:10248瀏覽

How Can I Efficiently Eager Load Nested Entities in Entity Framework Core 2.0.1?

Entity Framework Core 2.0.1 中嵌套實體的急切載入

在Entity Framework Core 2.0.1 中,🎜>

在Entity Framework Core 2.0.1 中嵌套,嵌套,嵌套,嵌套的實體的實體急切載入是不是內建功能。當載入具有多個關係層級的實體時,這會成為問題,導致相互嵌套的相關實體出現空值。

要解決此挑戰,可以使用自訂擴充方法:
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 omitted for brevity
}

此方法採用實體類型和可選的最大深度,並傳回包含路徑的列表。

透過將這些擴充方法合併到通用儲存庫方法:
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();
}

現在可以在 Entity Framework Core 2.0.1 中急切載入嵌套的相關實體。這種方法提供了更全面的急切載入機制,消除了明確 Include 和 ThenInclude 語句的需要。

以上是如何在 Entity Framework Core 2.0.1 中有效率地預先載入嵌套實體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn