在Webforms中使用ObjectContext,使用语句与每页一个实例

时间:2011-10-26 09:52:25

标签: c# .net entity-framework

我对网络表单中using个对象的ObjectContext语句的使用有疑问。

如果我们有两个方法的表单设置,比如'Load()''Save()',并且两者都需要使用ObjectContext,那么最好是创建上下文的实例变量在两种方法中使用它,依靠类的生命周期来隐含地处理对象,或者明确地创建对象上下文的两个实例,包含在using中,每个方法一次?

我问的原因是我不确定两件事。 A)实例化对象上下文的开销是否足够高以保证上下文打开以供整个类使用,或者在另一方面B)是否存在类的生命周期的对象上下文太长并且我们应该在工作单元完成后明确地关闭它?

针对此类环境的任何想法/建议/最佳做法?

2 个答案:

答案 0 :(得分:2)

如果查看Tip 18,您会看到ObjectContext的构造时间可以忽略不计。

如果您需要以不同的方法访问上下文,它们可以一起传递上下文作为参数。如果方法不依赖于彼此,我会每次都选择新的上下文。

答案 1 :(得分:2)

您可以管理每个请求的ObjectContext,不要按照页面或WebForm进行考虑,它必须绑定到当前Request,请点击此处查看更多详细信息:

How to Manage ObjectContext Per Request in ASP.NET

这或多或少也是NHibernate会议通常所做的事情。

我个人习惯用using语句编写代码,并立即创建/配置ObjectContext,并在我需要的每个方法中。在某些情况下,你必须以这种方式特别注意,因为你的实体将从一个上下文加载并保存在另一个上下文中,如果我记得正确,我必须将它们附加回来。我已经有一段时间了......