【发布时间】:2021-07-11 01:59:13
【问题描述】:
我正在为我的项目使用 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 包括PermissionDefinitionEntity 和PermissionDefinitionEntity 的自引用。
我可以用 EF Core 做到这一点吗?
【问题讨论】:
-
你不能,至少不能在一个 LINQ 语句中。这是一个未知深度的树扩展,需要递归查询。或者,如果您想要整个树,只需查询所有
PermissionGroupDefinitions 和PermissionDefinitions(删除这个多余的Entity后缀),这将填充所有导航属性。 -
那么,我必须使用递归查询吗?感谢您的支持。
-
但是你能解释一下我怎样才能得到整棵树吗?我不明白为什么要删除实体后缀?我认为它只是类名。 @gert-arnold
-
stackoverflow.com/a/41837737/861716。删除后缀只是一个建议,没有用,而且会降低可读性。
-
感谢您的宝贵时间。我想我会使用递归查询来解决这个问题。
标签: c# linq entity-framework-core include nested-queries