带有实体框架的ASP.NET MVC

And*_*sen 6 asp.net-mvc entity-framework

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

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

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

我无法在ASP.NET MVC上启动Application_BeginRequest和..EndRequest .他们不是被解雇了吗?我需要做什么特别的伎俩?

Bra*_*son 6

EF中的对象上下文,如L2S中的数据上下文,被设计为"工作单元",它们不是线程安全的,并且它们的设计并不长久.

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

  • 不,这是一个糟糕的方法.它使控制器难以测试,也意味着控制器外部的工作单元不可用.下面提到的每个请求会话模式更好.EF v1确实支持延迟加载 - 它必须是显式的. (3认同)

And*_*sen 5

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