gpt4 book ai didi

c# - 嵌套包含 Entity Framework Core

转载 作者:行者123 更新时间:2023-12-05 03:39:58 25 4
gpt4 key购买 nike

我正在为我的项目使用 EF Core。我在 EF Core 中遇到嵌套查询问题。

我有 2 个类:

public class PermissionGroupDefinitionEntity : IEntity
{
public string Name { get; set; }
public string NormalizedName { get; set; }
public string DisplayName { get; set; }

public virtual ICollection<PermissionDefinitionEntity> PermissionDefinitions { get; set; }
}

public class PermissionDefinitionEntity : IEntity
{
public string Name { get; set; }
public string NormalizedName { get; set; }
public string DisplayName { get; set; }

public bool IsEnabled { get; set; }
public virtual string GroupName { get; set; }

public virtual PermissionGroupDefinitionEntity Group { get; set; }
public virtual ICollection<PermissionDefinitionEntity> Children { get; set; }
}

这是 ApplicationDbContext:

        builder.Entity<PermissionDefinitionEntity>().HasOne(r => r.Group).WithMany(r => r.PermissionDefinitions).OnDelete(DeleteBehavior.Cascade);
builder.Entity<PermissionDefinitionEntity>().HasOne(r => r.Parent).WithMany(r => r.Children).OnDelete(DeleteBehavior.Cascade);

我想查询所有 PermissionGroupDefinitionEntity 包括 PermissionDefinitionEntityPermissionDefinitionEntity 的自引用。

我可以使用 EF Core 做到这一点吗?

最佳答案

您需要递归加载放置在 PermissionGroupDefinitionEntity 中的 PermissionDefinitions

首先,您应该使用以下查询加载所有 PermissionGroupDefinitionEntities,包括其子项:

var query = _dbContext.PermissionGroupDefinitionEntity
.AsNoTracking()
.Include(p => p.PermissionDefinitions )
.ThenInclude(p => p.Children)
.ToListAsync();

因为每个 PermissionGroupDefinitionEntity 都有一个 PermissionDefinition 的列表,所以你需要一个像这样的代码的嵌套循环:

foreach (var PermissionGroupDefinitionEntity in PermissionGroupDefinitionEntities)
{
foreach (var PermissionDefinitions in PermissionDefinitions)
{

}
}

然后在内部循环中你应该调用你的递归函数。

请参阅以下链接(在 Entity Framework Core 中递归获取所有子项的示例)

https://patrickdesjardins.com/blog/how-to-load-hierarchical-structure-with-recursive-with-entity-framework-5

这种方式性能很差,我不推荐这种方式。

在这种情况下,您似乎必须用 SQL 编写存储过程才能获得更好的性能。

关于c# - 嵌套包含 Entity Framework Core,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68332737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com