我有一个3层的Web应用程序,有很多简单的表单。一个用于列出记录,一个用于编辑单个记录,等等。工作。
我有一个我的EDMX所在的DataLayer。 我有一个应用层,我的POCO在哪里。 我拥有所有控制器类等的BusinessLayer(不是MVC!) 我有一个用于界面的UI图层。
EDMX有许多很多导航属性的表。 当然,当我在我的一个控制器中获取数据时,例如, GetCustomerById(int id),我创建了Object上下文并在完成后关闭它。
但是,当我尝试访问UI层中的导航属性时,ObjectContext
超出了范围。
我应该在网络层中做(using MyContext = new MyContext()) {... }
吗?这似乎不对。
我应该创建另一组POCO,我从BizLayer的实体数据填充吗?
当我想保存在Web表单中输入的数据时会发生什么?我会打电话给BizLayer控制器,例如SaveCustomer()?
我的问题是,如果我希望能够正确访问实体的导航属性,您如何设计Web UI图层?
注意: EDMX设置为LazyLoading。
答案 0 :(得分:1)
您希望在UI中使用延迟加载,但这意味着UI定义了ObjectContext
的生命周期。有很多方法可以实现这一点,而不会将上下文暴露给UI。例如,您可以使用这种简单的方法:
Dispose
方法中处理上下文。Page.Load
中创建控制器实例并将其置于Page.Unload
。Load
和Unload
之间)将在单一生活环境的范围内。无论如何,你不应该在Web应用程序中过多地延迟加载。在您的表单中,您通常确切地知道您需要哪些实体,因此您应该直接请求它们。