2011-07-05 68 views
0

我使用Asp.net和EF 4.實體框架包含和導航屬性

在我的模型,我有兩個實體:CmsGroupsTypes至極有一個名爲CmsContents到實體CmsContents導航性能。

我正在使用一個EntityDataSource控件和一個GridView。

我需要返回CmsGroupsTypes,但使用Navigational Property和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; 

回答

0

快速猜測:Include需要一個導航屬性的名稱,這樣反而:

Include="it.CmsContents.ContentId" 

應該不會是

Include="it.CmsContents"