【发布时间】:2011-05-13 06:10:32
【问题描述】:
我正在使用实体框架构建一个 MVC3 应用程序,其中几乎所有操作都只允许授权用户使用。因此,我经常需要引用成员实体。我已经尝试了缓存成员的不同方法,并提出了一种非常快的方法。但我想对我正在做的事情的风险/缺点提出一些建议/观点。
我已经定义了一个工厂类,用于检索在 Ninject 中“注册”的 Member 实例,这样我就可以在任何需要的地方使用它。 Ninject 绑定是“会话范围的”(我稍后会解释)。工厂方法首先检查 Session 以查看它是否包含先前创建的 Member 实例。如果 Session 没有,例程通过 EF 从底层数据库创建一个实例,将值存储在 Session 中并返回它。
因为对成员实例的一些访问是 EF 调用,所以我必须确保 EF 对象上下文也在会话范围内(我学会了针对最初在不同上下文中创建的成员实例调用 EF 例程的艰难方法效果不太好)。由于工厂和对象上下文是通过 Ninject 创建的,因此我必须为 Ninject 定义一个 Session 范围。
我找到了一个代码 sn-p 来执行 here,我可以对其进行修改以满足我的需要。但它是如此简单的 sn-p,我想知道是否有原因 Ninject(或 Ninject MVC)没有“本机”提供该功能。这让我怀疑我的所作所为是否在招惹麻烦。
我确实意识到在 Session 中存储内容有很多方面您必须围绕这些方面进行编程,其中最主要的是存储的对象可以随时“消失”(即,您总是必须有一个获得它时重新创建它的方法)。但是,虽然这增加了足够的复杂性,我不想为很多对象做这件事,但为单个 Member 对象做这件事并不是那么困难。
在任何情况下,对于会话范围的 Ninject 绑定和在 MVC 应用程序的 Session 中存储 EF 实体的建议和反馈,我们将不胜感激。
【问题讨论】:
标签: asp.net-mvc session ninject