EntityDataSource是否支持“it.Property.Property”语法?

时间:2010-06-09 20:12:26

标签: asp.net entity-framework entitydatasource

我有一个EntityDataSource,我正在尝试替换以前的代码隐藏工作。我的EntityDataSource看起来像:

    <asp:EntityDataSource 
        runat="server" 
        ID="personDataSource" 
        ContextTypeName="Model.GuidesEntities" 
        EntitySetName="CharacterFavorites" 
        OrderBy="it.Person.FullName" 
        Select="it.Person.Id" 
        Where="it.UserName = @userName" />

当我实际使用它时,我收到错误:

  

'人'不是类型的成员   'Transient.rowtype [(Id,Edm.Int32(Nullable = True,DefaultValue =))]'in   当前加载的模式。

EntityDataSource不支持走关系吗?你会如何使用EntityDataSource做到这一点?

现在,后面的代码中还添加了@userName参数。知道如何直接在WhereParameters集合中指定用户名参数的任何人的额外积分。

3 个答案:

答案 0 :(得分:2)

EF在这里使用“超级延迟加载”(我自己的术语)。它不会自动伸出并抓取相关的“Person”对象。您必须在entotyDataSource中指定要提供的其他对象。所以你需要添加这一行:“Include =”Person“。见下文:

 <asp:EntityDataSource 
        runat="server" 
        ID="personDataSource" 
        ContextTypeName="Model.GuidesEntities" 
        EntitySetName="CharacterFavorites" 
        OrderBy="it.Person.FullName" 
        Select="it.Person.Id" 
        Where="it.UserName = @userName" 
        Include="Person"  />

如果您需要添加多个关联,请用逗号分隔:Include =“Person,Dog,Chicken,SalesOrder” 另外,在你的Where子句中它是“==”而不是“=”。

答案 1 :(得分:1)

没有标准的预定义参数类型允许您将当前用户名作为标记中的Where参数获取(我猜你在谈论User.Identity.Name)。像......一样简单......

<asp:Parameter Name="userName" DefaultValue='<%# User.Identity.Name %>' />

...由于您无法在参数控件中使用数据绑定语法,因此无法正常工作。

但您可以创建custom parameters。 (该页面的后半部分是“用户名参数”的具体示例。)

您遇到异常的问题:我在EntityDataSource中使用带有导航属性的“it-Syntax”,它看起来或多或少与您的示例完全相同。如果没有看到更多的模型,很难说出可能导致错误的原因。但通常,支持在EntityDataSource中导航属性并且可以正常工作。

答案 2 :(得分:0)

   protected void MyNotesSelecting(object sender, EntityDataSourceSelectingEventArgs e)
            {
                e.DataSource.Where = "it.UserName=="+User.Identity.Name
            }