在实体框架中绑定自定义属性

发布于 2024-10-08 10:07:47 字数 1431 浏览 1 评论 0 原文

我的 EF 模型中有一个员工实体。然后,我向项目添加了一个类以添加自定义属性

public partial class Employee
{
    public string Name
    {
        get { return string.Format("{0} {1}", this.FirstName, this.LastName); }
    }
}

在 aspx 表单(在 FormView 内)上,我想将 DropDownList 绑定到员工集合:

                <asp:Label runat="server" AssociatedControlID="ddlManagerId"
                    Text="ManagerId" />
                <asp:DropDownList ID="ddlManagerId" runat="server" 
                    DataSourceID="edsManagerId" 
                    DataValueField="Id" 
                    DataTextField="Name" 
                    AppendDataBoundItems="true"
                    SelectedValue='<%# Bind("ManagerId") %>'>
                    <asp:ListItem Text="-- Select --" Value="0" />
                </asp:DropDownList>
                <asp:EntityDataSource ID="edsManagerId" runat="server" 
                    ConnectionString="name=Entities" 
                    DefaultContainerName="Entities" 
                    EntitySetName="Employees" 
                    EntityTypeFilter="Employee"
                    EnableFlattening="true">
                </asp:EntityDataSource>

不幸的是,当我启动页面时,我收到错误:

DataBinding: 'System.Web.UI.WebControls.EntityDataSourceWrapper' does not contain a property with the name 'Name'.

Any ideas我做错了什么?

I have an employee entity in my EF model. I then added a class to the project to add a custom property

public partial class Employee
{
    public string Name
    {
        get { return string.Format("{0} {1}", this.FirstName, this.LastName); }
    }
}

On a aspx form (inside a FormView), I want to bind a DropDownList to the employee collection:

                <asp:Label runat="server" AssociatedControlID="ddlManagerId"
                    Text="ManagerId" />
                <asp:DropDownList ID="ddlManagerId" runat="server" 
                    DataSourceID="edsManagerId" 
                    DataValueField="Id" 
                    DataTextField="Name" 
                    AppendDataBoundItems="true"
                    SelectedValue='<%# Bind("ManagerId") %>'>
                    <asp:ListItem Text="-- Select --" Value="0" />
                </asp:DropDownList>
                <asp:EntityDataSource ID="edsManagerId" runat="server" 
                    ConnectionString="name=Entities" 
                    DefaultContainerName="Entities" 
                    EntitySetName="Employees" 
                    EntityTypeFilter="Employee"
                    EnableFlattening="true">
                </asp:EntityDataSource>

Unfortunately, when I fire up the page, I get an error:

DataBinding: 'System.Web.UI.WebControls.EntityDataSourceWrapper' does not contain a property with the name 'Name'.

Any ideas what I'm doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

单挑你×的.吻 2024-10-15 10:07:47

经过大量搜索后,我发现 EntityDataSource 不支持部分类中的自定义属性。它仅返回模型中的实体。

After much searching I discovered that that the EntityDataSource does not support custom properties in the partial classes. It only returns the entity that is in the model.

远山浅 2024-10-15 10:07:47

根据此 文章

问题是我们使用的是 EntityDataSourceWrapper 而不是我们的实际实体。解决方案是什么?停止使用包装纸!
禁用展平,如下所示:

有关扁平化的更多信息,请参见 此处

As per this article:

The issue is that we’re using the EntityDataSourceWrapper and not our actual entity. The solution? Stop using the wrapper!
Disable flattening, like this:

<asp:EntityDataSource
...
EnableFlattening="False"
...
</asp:EntityDataSource>

More information on Flattening is here.

晨曦慕雪 2024-10-15 10:07:47

您能否验证您的两个部分 Employee 类是否位于同一名称空间中?

Could you verify that both your partial Employee classes are in the same namespace?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文