加载子项(导航属性)实体不起作用

时间:2010-08-13 00:52:02

标签: silverlight entity-framework silverlight-4.0 entity-framework-4

我对这个问题非常艰难。我有一个名为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时,需要加载这些附件!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过在查询中加入join,您在Include之后更改了查询的形状。所以Include is discardedBut 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;
}