6

我认为在 Application_BeginRequest 中设置实体对象上下文,将其存储在 Request.items 中,在整个请求中使用它并在 Application_EndRequest 中处理它是明智的。这样上下文总是可用的,我可以在我的视图中导航实体框架对象图,延迟加载我还没有急切获取的内容。

我认为这会让它像在Ruby on Rails 上开发一样。

也许我应该因为说出这种异端邪说而被枪杀,但这太疯狂了,它可能会起作用:)

我无法让 Application_BeginRequest 和 ..EndRequest 在ASP.NET MVC上触发。他们不是被解雇了吗?我需要做什么特别的技巧吗?

4

2 回答 2

6

EF 中的对象上下文,就像 L2S 中的数据上下文一样,被设计为“工作单元”,它们不是线程安全的,并且它们的设计目的不是为了长期存在。

在 MVC 中,最好的策略是在控制器的构造函数中创建一个(隐式或显式,无关紧要),然后在 Dispose 方法中释放它。当然,EF 不做延迟加载,所以你必须找到自己的懒惰方式。:)

于 2008-11-11T07:38:32.403 回答
4

ASP.NET MVC 的 1.0 版本让我可以在 beginrequest 和 endrequest 上连接事件处理程序,新建一个 SessionScope 并将其存储在 beginrequest 的 HttpContext.Items 中(我切换到 Castle ActiveRecord),在 endrequest 中我从 HttpContext 中选择 sessionscope .Items 并处理它。这可以在整个请求生命周期中实现延迟加载。(甚至可以在视图中导航对象图。)

于 2009-03-30T19:50:27.227 回答