实体框架包含和导航属性

时间:2011-07-05 10:38:10

标签: linq entity-framework linq-to-entities entitydatasource

我使用Asp.net和EF 4。

在我的模型中,我有两个实体:CmsGroupsTypes它有一个名为CmsContents到实体CmsContents的导航属性。

我正在使用EntityDataSource控件和GridView。

我需要返回CmsGroupsTypes,但使用导航属性和QueryStringParameter过滤主题。

使用以下代码我收到错误:

'ContentId' is not a member of 'Transient.collection[CmsModel.CmsContent(Nullable=True,DefaultValue=)]'. To extract a property of a collection element, use a subquery to iterate over the collection

<asp:EntityDataSource ID="EntityDataSource1" runat="server"
    ConnectionString="name=CmsConnectionStringEntityDataModel" DefaultContainerName="CmsConnectionStringEntityDataModel"
    EnableFlattening="False" EntitySetName="CmsGroupsTypes" Include="it.CmsContents.ContentId"
    Where="it.CmsContents.ContentId == ContentId">
    <WhereParameters>
        <asp:QueryStringParameter Name="ContentId" QueryStringField="ContentId" DbType="Int32" />
    </WhereParameters>
</asp:EntityDataSource>

知道我做错了吗?

我在LINQ中有一个等效的版本,它正在工作,但我必须在EntityDataSource控件上直接实现。

      // Get ContentId from Query String.
        int myContentId = Convert.ToInt32(ContentIdFromUrl);
        // Find all GroupsType for a specific Content.
        var myGroupsTypesList = from g in context.CmsGroupsTypes
                                where g.CmsContents.Any(x => x.ContentId == myContentId)
                                select g;

1 个答案:

答案 0 :(得分:1)

快速猜测:Include采用导航属性的名称,而不是:

Include="it.CmsContents.ContentId"

不应该是

Include="it.CmsContents"