哪个asp.net控件可用于绑定一个EF对象
本文关键字:一个 对象 EF 绑定 net asp 控件 用于 哪个 | 更新日期: 2023-09-27 18:14:18
当我想从MainTable中获得更多行时,我使用GridView的属性SelectMethod,这样我就可以从连接到MainTable的每个表中访问数据(在GridView中)
<asp:Label ID="masRegionNameLbl" runat="server" Text='<%#:Item.Region.RegionName %>'></asp:Label>
在这里我可以访问列RegionName,它是表Region的一部分,使用导航(MainTable中的FK RegionId)连接到MainTable。
我现在想要的是让每条记录都有自己的详细信息页面,在那里我可以显示有关所选记录的更详细的信息。
我的问题是,如果在asp.net中有任何控件,我可以绑定一个EF对象,并像在GridView中一样访问数据。
第一个选项是GridView,它只显示了一个记录,但它不是最好的设计。第二次我试图在代码背后加载MainTable的所需实例,但在这种情况下,我只能访问物理上在MainTable中的字段,例如,我可以访问MainTable。名称,但我不能访问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更好的方法?
The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
这个错误意味着你试图访问上下文后,它已经被处置(正如错误非常清楚地说明:))EF使用延迟加载导航属性。所以发生的事情是,你正在访问一个导航属性,EF需要从上下文中获取数据,但是上下文已经不存在了。
有两个选项:
- 您需要重新创建上下文,或者一开始就不处理它
- 你可以告诉EF迫切加载这个导航属性,而不是惰性加载。
您可以使用Include()
方法来完成2,该方法指示EF优先加载所选的导航属性。点击这里查看更多信息
EDIT:如果您想关闭延迟加载,您可以通过不将导航属性标记为virtual
或在上下文级别通过将以下代码添加到构造函数中来实现:
public class MyContext : DbContext
{
public MyContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
}