RESTful API实体框架上下文重复子集合数据C#
我使用投影(显式加载)调用和过滤从子表返回的集合数据,结果通过RESTful Api服务公开。json很好,但它重复子表集合对象。使用“AsNoTracking()”方法会使json输出中的嵌套子集合为空,这是不对的 下面是我的代码和json输出。我需要帮助来阻止子对象重复RESTful API实体框架上下文重复子集合数据C#,c#,json,entity-framework,rest,restful-architecture,C#,Json,Entity Framework,Rest,Restful Architecture,我使用投影(显式加载)调用和过滤从子表返回的集合数据,结果通过RESTful Api服务公开。json很好,但它重复子表集合对象。使用“AsNoTracking()”方法会使json输出中的嵌套子集合为空,这是不对的 下面是我的代码和json输出。我需要帮助来阻止子对象重复 public IQueryable<ApiViewModel> getAllActive() { //Explicit loading (projection) var resul
public IQueryable<ApiViewModel> getAllActive()
{
//Explicit loading (projection)
var result = db.Markets
.Where(p => p.IsActive == true)
.Select(p => new ApiViewModel()
{
Market = p,
TravelCentres = p.TravelCentres.Where(x => x.IsActive == true)
});
return result;
}
尝试Distinct()方法。另请参见上面的链接
在中,我能够通过使用第三方IncludeFilter()扩展方法来解决这个问题。
您是否使用LazyLoading对吗。。您是否尝试过在您的预测中重新映射市场,使其不会同时加载相关的旅游中心?或者。。你能用Ealder加载代替惰性加载吗?谢谢@federico的回复。我使用投影/显式加载,因为急切加载无法过滤子(TravelCentre)表。我如何在投影中重新映射市场,使其不会同时加载其中的相关TravelCentres?嗯,您不能用Eader加载一些东西,比如:var result=db.Markets.Where(p=>p.IsActive==true)。包括(xx=>xx.TravelCentres.Where(x=>x.IsActive==true))。选择(p=>new ApiViewModel){Market=p,});失败。“ExceptionMessage”:“包含路径表达式必须引用在类型上定义的导航属性。使用虚线路径引用导航属性,使用Select运算符引用集合导航属性。\r\n参数名称:path”,啊,好的,所以TravelCentres不是一对多的参考,而是1-1
[
{
"Market": {
"MarketId": "AE",
"Name": "Arabian Emirates",
"TravelCentres": [
{
"City": "New Lynn, New Zealand",
"Address": "now",
"Telephone": "09169647771",
"Email": "test@wak.com"
},
{
"City": "Uyo, Nigeria",
"Address": "Ewet housing",
"Telephone": null,
"Email": null
},
{
"City": "Lagos, Nigeria",
"Address": "no",
"Telephone": "09993",
"Email": "patricko@wak.com"
}
]
},
"TravelCentres": [
{
"City": "New Lynn, New Zealand",
"Address": "now",
"Telephone": "09169647771",
"Email": "test@wak.com"
},
{
"City": "Uyo, Nigeria",
"Address": "Ewet housing",
"Telephone": null,
"Email": null
},
{
"City": "Lagos, Nigeria",
"Address": "no",
"Telephone": "09993",
"Email": "patricko@wak.com"
}
]
}
]