Entity Framework Включить и свойство навигации - PullRequest
1 голос
/ 05 июля 2011

Я использую 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 Ответ

1 голос
/ 05 июля 2011

Быстрое предположение: Include принимает имя свойства навигации, поэтому вместо:

Include="it.CmsContents.ContentId"

не должно быть

Include="it.CmsContents"

?

...