相关疑难解决方法(0)

ORM(对象关系映射)中的"N + 1选择问题"是什么?

"N + 1选择问题"通常被称为对象关系映射(ORM)讨论中的一个问题,我理解它必须为对象中看起来很简单的事情做出大量的数据库查询.世界.

有没有人对这个问题有更详细的解释?

orm select-n-plus-1

1507
推荐指数
16
解决办法
37万
查看次数

如何使用Entity框架进行递归加载?

我在带有TreeNodes表的DB中有一个树结构.该表有nodeId,parentId和parameterId.在EF中,结构类似于TreeNode.Children,其中每个子节点都是TreeNode ...我还有一个包含id,name和rootNodeId的Tree表.

在一天结束时,我想将树加载到TreeView中,但我无法想象如何一次加载它.我试过了:

var trees = from t in context.TreeSet.Include("Root").Include("Root.Children").Include("Root.Children.Parameter")
        .Include("Root.Children.Children")
                        where t.ID == id
                        select t;
Run Code Online (Sandbox Code Playgroud)

这将使我成为前两代而不是更多.如何使用所有代和其他数据加载整个树?

recursion entity load entity-framework

20
推荐指数
2
解决办法
2万
查看次数

EFCore 中的 CTE(公用表表达式)

我的数据库中有一个表,用于存储位置的层次结构。它有 3 列(Id, Name, ParentId)。我需要根据条件加载一些行以及它们的所有父行直到根。如果是在 ADO 中,我会使用以下语句。

with Temp
as
(
    select * from Locations where Name like '%filter%'

    union all

    select Locations.* 
    from Temp join Locations on Temp.ParentId = Locations.Id
)
select * from Temp
Run Code Online (Sandbox Code Playgroud)

我正在使用 EFCore,并通过一些搜索发现实体框架如何与递归层次结构一起工作?Include() 似乎不适用于它 如何使用实体框架进行递归加载?还有一堆其他的,他们都老了。

我发现的所有解决方案要么对层次结构的深度进行硬编码(使用Include),要么在 C# 中进行递归。所有这些,我的问题是最好的解决方案是什么?

我可以使用FromSqlRaw (类似下面的代码),但是我不喜欢在 C# 中手动编写查询。

    var locations = DataContext.Locations
    .FromSqlRaw("MyQuery").ToList();
Run Code Online (Sandbox Code Playgroud)

我在用EFCore 3.1.7

sql-server recursion hierarchy sql-cte entity-framework-core

10
推荐指数
1
解决办法
5044
查看次数

如何实现递归自连接实体框架?

我在数据库中有菜单表,它有自引用外键,即 ParentID。下面是我的菜单类(数据库优先方法)

public partial class Menu
{
    public Menu()
    {
        this.Menu1 = new HashSet<Menu>();
        this.Products = new HashSet<Product>();
    }

    public int MenuID { get; set; }
    public string Name { get; set; }
    public Nullable<int> ParentID { get; set; }
    public virtual ICollection<Menu> Menu1 { get; set; }
    public virtual Menu Menu2 { get; set; }
    public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我想实施以下事情,

  1. 我想要使​​用菜单 id 的整个层次结构,例如“如果我通过 7 那么结果应该是菜单 id 7 的所有子级和子级”
  2. 如果我通过 7 那么我想要菜单 id 7 的所有父级和超级父级。 …

.net c# sql-server entity-framework

1
推荐指数
1
解决办法
2776
查看次数