【问题标题】:Entity Framework eager loading nested object graph, errors out to invalid column name实体框架急切加载嵌套对象图,错误列名无效
【发布时间】:2016-09-16 11:38:09
【问题描述】:

猜猜,我在急切加载嵌套图时缺少向 EF 通知导航属性。请让我知道我错过了什么?。

我的简化对象图

Product (ProductId, IEnumerable<Task>, ProductStatusId, ProductStatus)

ProductStatus (ProductStatusId, Description)

Task (TaskId, ProductId, TaskStatusId, TaskStatus)

TaskStatus (TaskStatusId, Description)

尝试加载 Product => 及其 Tasks => 及其 TaskStatus

.Include(p => p.ProductStatus)
.Include(p => p.Tasks)
.Include(p => p.Tasks.Select(t => t.TaskStatus))

得到以下错误:

{"无效的列名 'TaskStatus_ProductStatusId'。\r\n无效的列 名称'ProductStatusId'}

【问题讨论】:

  • 听起来像是关系设置问题。请发布包含导航属性/键属性和数据注释/流畅设置的简化类。
  • 你是对的 Ivan Stoev,流畅的配置名称错误。 (我们写了数百个配置,这个列名映射搞砸了)。
  • 您确定您的数据库是最新的并与您的对象模型保持一致吗?
  • 是的,布比,他们很好。你的分析是正确的。在我们的项目中,它既不是代码优先也不是数据库优先,我们分别做模型和数据库,并通过 fluent 映射它们。这就是引入问题的地方,因为我们在那里对列名进行硬编码。

标签: entity-framework eager-loading object-graph


【解决方案1】:

这应该可以工作

  _yourContext.Product   
  .Include(p => p.ProductStatus)
  .Include(p => p.Tasks.Select(t => t.TaskStatus))

你不需要

  .Include(p => p.Tasks)

因为“.Include(p => p.Tasks.Select(t => t.TaskStatus))”会从Task Collection中获取Tasks和TaskStatus。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2012-02-07
    相关资源
    最近更新 更多