Asp.net NHibernate-访问同一数据库的两个会话工厂

Asp.net NHibernate-访问同一数据库的两个会话工厂,asp.net,asp.net-mvc,nhibernate,Asp.net,Asp.net Mvc,Nhibernate,这与将asp.net mvc web应用程序拆分为两个应用程序有关,一个是公共应用程序,另一个是管理员应用程序。当然,他们俩将共享同一个数据库 有了两个web应用程序,我将有两个主机应用程序和两个独立的Nihbernate会话工厂我担心的是,它们单独的数据缓存会导致各种问题。 在发布这篇文章时,我看到了一个类似的问题(出于不同的原因)。我真的不想只为低使用率的管理应用程序设置某种分布式缓存 如何解决这个问题?使用NHibernate,如果不采取严厉措施,是否不可能将管理部分分离到自己的应用程序中

这与将asp.net mvc web应用程序拆分为两个应用程序有关,一个是公共应用程序,另一个是管理员应用程序。当然,他们俩将共享同一个数据库

有了两个web应用程序,我将有两个主机应用程序和两个独立的Nihbernate会话工厂我担心的是,它们单独的数据缓存会导致各种问题。

在发布这篇文章时,我看到了一个类似的问题(出于不同的原因)。我真的不想只为低使用率的管理应用程序设置某种分布式缓存

如何解决这个问题?使用NHibernate,如果不采取严厉措施,是否不可能将管理部分分离到自己的应用程序中


谢谢。

我们成功地运行了此功能,尽管数据中的某些差异始终是一个问题。但是,由于每个站点都可以配置第二级缓存,因此您可以针对manager上的特定缓存区域禁用或关闭该缓存

二级缓存将仅用于读取,因为显式更新将被刷新并直接持久化

如果您担心站点上的内容一旦修改就会“过时”,则需要某种触发器来指示站点退出缓存。如果我没记错的话,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”处理您关心的并发性问题。这并不能完全解决您的问题,但可以最大限度地减少并发问题。

首先,您应该知道这一点

因此,实际上,为了不使用分布式缓存,您甚至不需要执行任何额外的步骤。只需使用“管理”ISessionFactory,不要为此启用任何二级缓存


这可能是单个应用程序/工厂内部的一种问题,但您已经通过将它们划分为两个不同的物理应用程序解决了该问题。

解决方案取决于您对“数据缓存”的理解。我想你是说二级缓存提供商之一?谢谢。但是,为什么这会是一个单一工厂内部的问题呢?当然,这个问题的产生正是因为我们没有使用单一的会话工厂?另外,关于二级缓存——即使它只在公共站点上使用,并且在管理站点上关闭——这仍然可能导致易变,对吗?(您可能在两个地方存储了不同的数据,1.在缓存中,公共应用程序使用,2.在数据库中,管理员应用程序直接访问。@UptheCraek,对,我只是想说,您不必为“管理员部分”的缓存/缓存失效埋头苦干。当然,您可能会遇到不一致性和各种并发性问题,但这些问题的主题超出了缓存。我提到这一点只是因为您告诉我您“真的不想为低使用率的管理应用程序设置某种分布式缓存”。您应该担心公共部分的过时数据。此外,imho,使用一个且只有一个应用程序并确保其可扩展性是更好的方法。当然,您将面临所有“在这里缓存,在那里缓存”问题,但您将拥有更多的控制权,不必考虑两个应用程序之间的“同步”。