这与a previous question I asked有关,关于将asp.net mvc网络应用程序拆分为两个应用程序 - 一个公开,一个管理。当然,它们都将共享相同的数据库。
使用两个Web应用程序,我将拥有两个主机应用程序,因此有两个独立的Nihbernate会话工厂。 我担心的是,他们的单独数据缓存会导致各种各样的问题。
发布此内容时,我查看了this question,其中包含了类似的问题(原因不同)。我真的不想仅为低使用率的管理应用程序设置某种分布式缓存。
如何解决这个问题?是否将管理部分分为自己的应用程序而不是NHibernate而不采取严厉的措施?
感谢。
答案 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中的一个问题,但您已经通过将它们分成两个不同的物理应用程序来解决该问题。