我对这个问题非常艰难。我有一个名为Attachment的Navigation属性,它是名为ContentChannel的实体的一部分。 ContentChannel是与KioskType的多对一关系。
在我的域服务扩展类中,我有以下查询:
public IQueryable<ContentChannel> GetContentChannelFromKioskType( long kioskTypeID )
{
var returnSet = (from cc in ObjectContext.ContentChannels.Include( "Attachment" )
join pcc in ObjectContext.PublishedContentChannels on cc.ContentChannelID equals pcc.ContentChannelID
where pcc.KioskTypeID == kioskTypeID
select cc);
return returnSet;
}
这适用于返回ContentChannels列表。但每个ContentChannel中的附件都为空。
我在ContentChannel元数据类中的附件属性上尝试了[Include]
,并在上面的查询中与ContentChannels.Include("Attachment")
结合使用 - 没有运气,附件始终为空。
我挖了更多,然后找到了明确加载我的子项目的东西:
ObjectContext.LoadProperty( returnSet, "Attachment" );
但这会产生以下错误:
无法为分离的实体显式加载属性。使用NoTracking合并选项加载的对象始终是分离的。
是不是因为我正在做一个事情不稳定且包含不起作用的联接?我需要做什么?当我获得ContentChannel时,需要加载这些附件!
有什么想法吗?
答案 0 :(得分:1)
通过在查询中加入join
,您在Include
之后更改了查询的形状。所以Include is discarded
。 But you don't need the join
:
public IQueryable<ContentChannel> GetContentChannelFromKioskType( long kioskTypeID )
{
var returnSet = (from cc in ObjectContext.ContentChannels.Include( "Attachment" )
where cc.PublishedContentChannels.Any(pcc => pcc.KioskTypeID == kioskTypeID)
select cc);
return returnSet;
}