【问题标题】:SingleOrDefault inside Include will raise the following error :- The Include path expression must refer to a navigation property defined on the type包含中的 SingleOrDefault 将引发以下错误:- 包含路径表达式必须引用在类型上定义的导航属性
【发布时间】:2016-02-26 07:11:21
【问题描述】:

我正在开发一个 asp.net mvc 4 Web 应用程序,我正在使用 Entity Framework 5。我有以下模型方法:

public SDJoin AllFindSDDetails_J(int id)
{
    var IT360Resource = entities.Resources
                .Include(a => a.ComponentDefinition)
                .Include(a => a.ResourceLocation.SiteDefinition.SDOrganization)
                .Include(a => a.ResourceLocation.SiteDefinition.AccountDefinitions1.SingleOrDefault().SDOrganization)
                .Include(a => a.ResourceState) 
                .SingleOrDefault(a2 => a2.RESOURCEID == tmsSD.Technology.IT360ID);

但是当这个方法被调用时,我得到了以下异常:

包含路径表达式必须引用导航属性 在类型上定义。使用虚线路径进行参考导航 属性和用于集合导航的 Select 运算符 特性。参数名称:path 描述:一个未处理的 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息和 它起源于代码的地方。

异常详细信息:System.ArgumentException:包含路径 表达式必须引用在类型上定义的导航属性。 使用虚线路径作为参考导航属性和选择 集合导航属性的运算符。

我通过替换它来修复它:

  .Include(a => a.ResourceLocation.SiteDefinition.AccountDefinitions1.SingleOrDefault().SDOrganization)

与:

  .Include(a => a.ResourceLocation.SiteDefinition.AccountDefinitions1.Select(aa=>aa.SDOrganization))

所以我将SingleOrDefault() 替换为Select(aa=>aa...)

我的问题是:为什么我不能在.Include() 中定义SingleOrDefault()

第二个问题:为什么我没有收到任何编译错误?我的意思是我成功构建了我的项目,但是在运行时调用该方法时出现异常。

谢谢

【问题讨论】:

  • 您没有收到编译错误,因为它是有效的语法。实体框架是一个库,直到运行时才能检测到这种错误。至于为什么你不能只加载第一个外部行:这是 EntityFramework 的限制。但是,您可以通过在第一次查询后显式加载外部行(并将其从 Include 中删除)来避免它。
  • @Rob 但正在使用 .Select,因为我正在采取正确的方法来遵循? ,我的意思是这会导致 aa.SDOrganization 被急切加载吗?
  • 是的,它会导致它们被急切加载(但是,它会加载所有的外部行,而不仅仅是第一行)

标签: c# asp.net asp.net-mvc asp.net-mvc-4 entity-framework-5


【解决方案1】:

您是否设置了任何映射?我在这里看不到任何映射。您可能需要通过流畅或基于属性的映射entity mapping

使用映射来专门设置对象关系

【讨论】:

  • 你在说哪个映射?
  • 看看链接。 EF 将根据您的模型推断关系,但它并不总是知道您打算做什么。您的实际关系可能与平均值不同,因此 ef 可能无法从模型中推断出来。在这种情况下,最好创建一个映射并将其包含在模型构建器中。它将定义正确的导航属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
  • 1970-01-01
  • 1970-01-01
  • 2014-06-29
  • 1970-01-01
相关资源
最近更新 更多