【发布时间】:2019-07-16 13:56:32
【问题描述】:
我必须在相关表的字段(用户名)旁边加载实体(具有 user_id 列),并且我希望跟踪我的实体。因此,我使用了一个包含我的实体的投影,并且该投影具有我分配相关表的该字段的属性......其工作原理如 EF Core 文档中所述:https://docs.microsoft.com/en-us/ef/core/querying/tracking#tracking-and-projections。
现在我的实体参与了 1:n 的关系。我需要加载相关实体,我也想使用与上述相同的方法;可惜这些实体没有被 EF Core 跟踪。
当我在 EF Core GitHub 页面上阅读 Top projection should fully materialize and track entities... 时,它给了我线索,即跟踪仅适用于最顶层的投影,不适用于相关实体的投影。
在下面的示例中,产品被跟踪,但组件不被跟踪:
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 实体(我不需要)。但我对允许我向实体添加任何类型的数据(如聚合值)的方法更感兴趣:实体本身可由用户编辑(因此我需要跟踪),额外的数据是只读的.
【问题讨论】:
-
根据EF on GitHub,这应该适用于EF Core 3.0。
标签: entity-framework-core tracking projection