C# 在LINQ查询中包含多对多EF子关系
我正在开发一个使用EF6、AutoMapper和Odata的API。我们有一个调用,它在存储库中使用自定义Linq查询,而不是依赖于约定,但是我们需要添加一个具有多对多关系的子集合。我以前在EF中设置过多对多(将HasMany…WithTable添加到模型的配置中,将集合添加到数据和视图模型中,并相应地进行映射),并且在这种情况下执行了相同的步骤。然而,我能得到的最接近期望行为的东西是使用Odata的$expand特性获得一个空白的子对象(它是正确的对象,但为空)。这向我表明,从OData和Automapper的角度来看,配置是正确的,但从EF的角度来看,配置是不正确的 以下是回购协议中的方法,不包括任何与子集合相关的内容(为了清晰起见,我缩短了它):C# 在LINQ查询中包含多对多EF子关系,c#,linq,entity-framework,odata,automapper,C#,Linq,Entity Framework,Odata,Automapper,我正在开发一个使用EF6、AutoMapper和Odata的API。我们有一个调用,它在存储库中使用自定义Linq查询,而不是依赖于约定,但是我们需要添加一个具有多对多关系的子集合。我以前在EF中设置过多对多(将HasMany…WithTable添加到模型的配置中,将集合添加到数据和视图模型中,并相应地进行映射),并且在这种情况下执行了相同的步骤。然而,我能得到的最接近期望行为的东西是使用Odata的$expand特性获得一个空白的子对象(它是正确的对象,但为空)。这向我表明,从OData和Au
公共静态IQueryable GetEligibleMeasures(此IRepository存储库,
字符串投影(D)
{
var measures=repository.GetRepository().Queryable();
var projects=repository.GetRepository().Queryable();
//更多存储库。。。
var eligibleMeasures=(从m开始)
在m.projectd等于p.projectd的项目中加入p
//更多连接和where子句
选择m
).Distinct();
返回可消除措施;
}
我需要的是能够返回具有多对多关系的站点集合。我试着把Include放在几个不同的地方(在from中,在distinct之前,在return中),但是什么也没想到。我还尝试通过config取消标准has many,并使用链接表作为实体,然后向查询添加两个连接以访问子集合,并使用include尝试加载它。这些都不管用
有没有人对此有任何经验或建议?如果这有帮助的话,我可以发布部分配置——三大科技产品之间的因素太多了,我不知道一开始应该发布什么
感谢您提供的帮助。不要在ORM中进行多对多映射,请显式映射联接表: 然后你的问题就消失了
public static IQueryable<Measure> GetEligibleMeasures(this IRepository<Measure> repository,
string projectId)
{
var measures = repository.GetRepository<Measure>().Queryable();
var projects = repository.GetRepository<PROJECT>().Queryable();
//More Repositories...
var eligibleMeasures = (from m in measures
join p in projects on m.PROJECTID equals p.PROJECTID
//more joins and where clauses
select m
).Distinct();
return eligibleMeasures;
}