哪个asp.net控件可用于绑定一个EF对象?

时间:2014-07-23 14:24:41

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

当我想从MainTable获取更多行时,我正在使用带有SelectMethod属性的GridView,因此我可以从与FK连接到MainTable的每个表中访问数据(在gridview内部)

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

在这里,我可以使用导航(MainTable中的FK RegionId)访问作为表区域一部分的RegionName列,该列与MainTable连接。

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

我的问题是,如果在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更好的东西吗?

1 个答案:

答案 0 :(得分:1)

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

此错误意味着您在处理完背景后尝试访问该环境(因为错误状态非常明确:) :) EF使用延迟加载导航属性。所以令人高兴的是你正在访问一个导航属性,EF需要从上下文中获取数据,但上下文不再存在。

有两种选择:

  1. 您需要重新创建上下文或不首先处理它 在你打这个电话之前。
  2. 您可以告诉EF热切地加载此导航属性,而不是懒惰。
  3. 您可以使用Include()方法完成2,该方法指示EF热切地加载所选的导航属性。查看here了解更多信息。

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

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