gpt4 book ai didi

entity-framework-core - EF Core 能否跟踪非最顶层投影中的实体?

转载 作者:行者123 更新时间:2023-12-04 00:15:07 27 4
gpt4 key购买 nike

我必须加载实体(具有 user_id 列)以及相关表的字段(用户名),并且我希望我的实体被跟踪。因此,我使用了一个封装我的实体的投影,该投影具有一个属性,我将其分配给相关表的该字段……其工作方式如 EF Core 文档中所述:https://learn.microsoft.com/en-us/ef/core/querying/tracking#tracking-and-projections .

现在我的实体参与了 1:n 关系。我需要加载相关实体,我也想使用与上面相同的方法;遗憾的是,EF Core 未跟踪这些实体。

当我读到Top projection should fully materialize and track entities...在 EF Core GitHub 页面上,它给了我跟踪仅适用于最顶层投影的线索,不适用于相关实体的投影。

在下面的示例中,跟踪了产品,但未跟踪组件:

  var entities = context.Products.Select(p =>
new ProductWrapper
{
Entity = p,
UserName = p.UserNavigation.Name,
Components = p.Components.Select(c => new ComponentWrapper
{
Entity = c,
UserName = c.UserNavigation.Name
})
});

这是一个错误吗?缺少的功能?有任何解决方法或更好的解决方案吗?

在这种特定情况下,我可以进行预先加载(通过 Include()),但这会加载整个 User 实体(我不需要) .但我更感兴趣的是一种允许我向我的实体添加任何类型的数据(如聚合值)的方法:实体本身可由用户编辑(因此我需要跟踪),额外数据是只读的.

最佳答案

这可能不是“真正的解决方案”,但对我来说,使用 Include 就可以了

这对你来说意味着这段代码:

context.Products.Select

应该变成

context.Products.Include("Components").Select

关于entity-framework-core - EF Core 能否跟踪非最顶层投影中的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57058982/

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