【问题标题】:Entity Framework Include syntax实体框架包含语法
【发布时间】:2016-05-27 06:23:23
【问题描述】:

我们在少数 LINQ 查询中使用了 Include。但是想知道包含方法重载仅显示(字符串路径)作为参数,如果我们更改数据库表名并重新生成实体,那么包含部分将引发运行时错误。如何在编译时发现此类问题?

例子:

Material has BusinessUnit. 
So we use repo.Material.Include("BusinessUnit")

如果我们将 BusinessUnit 实体名称更改为 OrgUnit 或其他名称会怎样。

【问题讨论】:

  • Entity Framework 4.1+ 中已经存在该功能。见参考here

标签: c# entity-framework linq


【解决方案1】:

如下使用以避免在Include 方法中使用string

将以下引用添加到您的文件中

using System.Data.Entity ;

并使用

Context.BusinessUnits.Load();

或者

Context.Materials.Include(m => m.BusinessUnit).Where(...)

【讨论】:

    【解决方案2】:

    为了使用 lambda 表达式的 Include 重载,您需要添加 using System.Data.Entity; 命名空间。重载包含在该命名空间中。然后你就可以使用

    repo.Material.Include(m => m.BusinessUnit)

    您必须使用 Entity Framework 4.1 或更高版本才能使用此功能

    【讨论】:

      【解决方案3】:

      在这里使用强类型

      repo.Material.Include(m => m.BusinessUnit)
      

      【讨论】:

      • 我正在使用实体框架 6.0,不知何故我没有得到那个超载。我在这里错过了什么吗?如果我在 include 上按 F12,我只会看到 public virtual DbQuery Include(string path);我需要自己写超载吗?
      • 这在 ef 4.1 中可用。不知道为什么你没有得到这个选项。请分享您的实体架构
      猜你喜欢
      • 2023-03-07
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多