Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在尝试解析“包含路径表达式必须引用在类型上定义的导航属性”_C#_Entity Framework_Linq_Tsql - Fatal编程技术网

C# 正在尝试解析“包含路径表达式必须引用在类型上定义的导航属性”

C# 正在尝试解析“包含路径表达式必须引用在类型上定义的导航属性”,c#,entity-framework,linq,tsql,C#,Entity Framework,Linq,Tsql,目前,我正在使用IQueryable,无法使部分查询正常工作。我得到一个System.ArgumentException,其描述在本文标题中 我将从我需要的TSQL查询开始,但使用IQueryable代码: SELECT w.*,wr.*,c.* FROM WorldRegion w JOIN WorldRegionResource wr ON w.Id = wr.Id JOIN Culture c ON wr.CultureId = c.Id WH

目前,我正在使用IQueryable,无法使部分查询正常工作。我得到一个System.ArgumentException,其描述在本文标题中

我将从我需要的TSQL查询开始,但使用IQueryable代码:

 SELECT w.*,wr.*,c.* 
   FROM WorldRegion w
   JOIN WorldRegionResource wr
     ON w.Id = wr.Id
   JOIN Culture c
     ON wr.CultureId = c.Id
  WHERE c.CultureName = 'en-US'
现在我来破解密码:

以下是实体结构:

public class WorldRegion
{
    public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
    public Culture Culture { get; set; }
}
public class Culture
{
    public string CultureName { get; set; }
}
最初我尝试更改查询。包括引发异常的查询:

query.Include(w => w.WorldRegionResources.Where(wr => wr.Culture.CultureName == "en-US"));
我一直在寻找解决办法,但没有成功。 我甚至尝试过构建匿名查询:

query.Include(w => w.WorldRegionResources.Select(wr => wr.Culture));
query.Select(w => new
{
    WorldRegion = w,
    WorldRegionResource = w.WorldRegionResources.Select(wr => new
    {
        WorldRegionResource = wr,
        Culture = wr.Culture.CultureName == "en-US"
    })
});
但这产生了与初始查询相同的结果。SQL Server探查器甚至无法识别“en-US”参数

提前感谢您的时间,并感谢您提供的任何帮助


罗尼

我相信你必须告诉这些元素它们映射到哪个实体

尝试将外键属性添加到外键id

public class WorldRegion
{
    public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
    [ForeignKey(nameof(Culture))]
    public int CultureId { get; set; }
    public virtual Culture Culture { get; set; }
}
public class Culture
{
    public string CultureName { get; set; }
}

这可能是因为你没有打电话给ToList,你能告诉我这个查询返回你的数据或查询吗?IQueryable query=repository.Queryable;query.Includew=>w.WorldRegionResources.Selectwr=>wr.Culture;如果没有结果,答案是打电话给报税员,这不是问题所在。他在Include中有一个WHERE条件,这是不允许的。这不会解决任何问题。查看Steven答案中的注释虽然这不是问题所在,但我在一个单独的文件中完成了映射:HasKeyt=>new{t.CultureId,t.Id};
query.Include(w => w.WorldRegionResources.Select(wr => wr.Culture));
query.Select(w => new
{
    WorldRegion = w,
    WorldRegionResource = w.WorldRegionResources.Select(wr => new
    {
        WorldRegionResource = wr,
        Culture = wr.Culture.CultureName == "en-US"
    })
});
public class WorldRegion
{
    public virtual ICollection<WorldRegionResource> WorldRegionResources { get; set; }
}
public class WorldRegionResource
{
    [ForeignKey(nameof(Culture))]
    public int CultureId { get; set; }
    public virtual Culture Culture { get; set; }
}
public class Culture
{
    public string CultureName { get; set; }
}