【问题标题】:Which asp.net control could be used for binding one EF object?哪个 asp.net 控件可用于绑定一个 EF 对象?
【发布时间】:2014-07-23 14:24:40
【问题描述】:

当我想从 MainTable 中获取更多行时,我正在使用带有属性 SelectMethod 的 GridView,这样我就可以访问通过 FK 连接到 MainTable 的每个表中的数据,例如(在 gridview 中)

<asp:Label ID="masRegionNameLbl" runat="server" Text='<%#:Item.Region.RegionName %>'></asp:Label>

在这里我可以访问列 RegionName,它是使用导航与 MainTable 连接的表 Region 的一部分(MainTable 中的 FK RegionId)。

我现在想要的是让每条记录都有自己的详细信息页面,我可以在其中显示有关所选记录的更详细信息。

我的问题是,在 asp.net 中是否有任何控件,我可以在其中绑定一个 EF 对象并像在 GridView 中一样访问数据。

第一个选项是 GridView,它只显示了一条记录,但它不适合设计。我第二次尝试在代码隐藏中加载所需的 MainTable 实例,但在这种情况下,我只能访问 MainTable 中物理上的字段,例如。我可以访问 MainTable.Name,但无法访问 MainTable.Region.RegionName。当我尝试访问此字段时,出现以下错误:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

我想知道我是否可以控制我只绑定一个对象 - MainTable 用某种方法,在这个控制中我可以做一些 html css 设计和访问(查看、编辑)与不断绑定的特定记录相关的所有数据.或者在这种情况下至少有比 GridView 更好的东西吗?

【问题讨论】:

    标签: c# asp.net entity-framework controls


    【解决方案1】:

    The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

    此错误意味着您在处理上下文后尝试访问上下文(因为错误状态非常清楚:)) EF 使用延迟加载导航属性。所以发生的事情是您正在访问导航属性,而 EF 需要从上下文中获取数据,但上下文不再存在。

    有两种选择:

    1. 您需要重新创建上下文或不处置它开始 在您拨打此电话之前。
    2. 您可以告诉 EF 急切地加载此导航属性,而不是懒惰地加载。

    您可以通过使用Include() 方法来完成2,该方法指示EF 急切地加载选择的导航属性。更多信息请查看here

    编辑:如果您想关闭延迟加载,您可以通过不将导航属性标记为 virtual 或在上下文级别通过将此代码添加到构造函数:

    public class MyContext : DbContext 
    { 
        public MyContext() 
        { 
            this.Configuration.LazyLoadingEnabled = false; 
        } 
    }
    

    【讨论】:

    • 感谢它的工作!但是还有一个问题是有可能以某种方式使用包含对象而不是 od 字符串路径吗?我正在尝试访问对象中与 db 相关的所有内容,因此当 db 中的某些内容发生变化时,我可以简单地更新 edmx 模型而不是重写字符串。
    • 为了完成这个答案,ASP.NET 中有一个用于单个数据库记录的组件,名为 DetailsView
    • DbExtensionsmsdn.microsoft.com/en-us/library/gg671236(v=vs.103).aspx中有一个通用版本的include
    • 我编辑了我的帖子,提供了有关禁用延迟加载的更多信息。
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 2011-08-13
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多