NHibernate - 访问同一数据库的两个SessionFactories

时间:2011-01-04 18:44:04

标签: asp.net asp.net-mvc nhibernate

这与a previous question I asked有关,关于将asp.net mvc网络应用程序拆分为两个应用程序 - 一个公开,一个管理。当然,它们都将共享相同的数据库。

使用两个Web应用程序,我将拥有两个主机应用程序,因此有两个独立的Nihbernate会话工厂。 我担心的是,他们的单独数据缓存会导致各种各样的问题。

发布此内容时,我查看了this question,其中包含了类似的问题(原因不同)。我真的不想仅为低使用率的管理应用程序设置某种分布式缓存。

如何解决这个问题?是否将管理部分分为自己的应用程序而不是NHibernate而不采取严厉的措施?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然数据中的某些差异始终是个问题,但我们已成功运行此功能。但是,由于每个站点都可以配置第二级缓存,因此您可以禁用它,也可以将其关闭,以便管理器上的特定缓存区域。

第二级缓存仅用于阅读,因为显式更新将被刷新并直接保留。

如果您担心网站上的内容在修改后会“旧”,则需要某种触发器来指示网站驱逐缓存。如果我正确记住它,NHibernate将逐出所有特定实体类型的二级缓存。

如果您的网站与您的管理员更新不同的实体,我认为您的并发问题将会很少。例如在网上商店:

Site will create orders, modify customers etc but only read products, prices and categories

Admin will modify orders, products, prices and categories but only read customers

但是,您可以指示NHibernate仅更新对象上的已修改字段/属性,以用于您关注映射上的dynamic-update =“true”并发问题的实体。这不会完全解决您的问题,但会最大限度地减少并发问题。

答案 1 :(得分:0)

首先,您应该知道NHibernate doesn't enable second-level cache by default

所以,实际上你甚至不需要需要任何其他步骤来完成不使用分布式缓存。只需使用“Admin”ISessionFactory,不要为此启用任何L2缓存。

这可能是单个App / Factory中的一个问题,但您已经通过将它们分成两个不同的物理应用程序来解决该问题。