我有一个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集合中指定用户名参数的任何人的额外积分。
答案 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
}