Caching 亚音速,共享DDB连接范围和应用状态

Caching 亚音速,共享DDB连接范围和应用状态,caching,subsonic,shareddbconnectionscope,Caching,Subsonic,Shareddbconnectionscope,我正在考虑将亚音速与多租户ASP.net web应用程序结合使用。每个客户端/实例有多个数据库。用户使用其用户名的域后缀登录,例如。user@tenant1, user@tenant2. 然后,自定义成员资格提供程序将确定用户正在使用的数据库,并对其进行身份验证。webapp中所有用户发起的调用都将封装在SharedDbConnectionScope调用中,但是我对缓存亚音速项有一个问题 基本上,每个实例都会有一些很少更改搜索选项/配置的记录。我想在Application_Start事件中读取这

我正在考虑将亚音速与多租户ASP.net web应用程序结合使用。每个客户端/实例有多个数据库。用户使用其用户名的域后缀登录,例如。user@tenant1, user@tenant2.

然后,自定义成员资格提供程序将确定用户正在使用的数据库,并对其进行身份验证。webapp中所有用户发起的调用都将封装在SharedDbConnectionScope调用中,但是我对缓存亚音速项有一个问题

基本上,每个实例都会有一些很少更改搜索选项/配置的记录。我想在Application_Start事件中读取这些内容,并将它们缓存到ApplicationState中

在应用程序启动事件中,它将在每个客户端数据库上循环,使用SharedDbConnectionScope连接到每个数据库,并创建这些缓存记录,例如应用程序“tenant1\u search\u obj”=亚音速对象

当用户加载搜索页面时,它将检查用户所在的域,然后从缓存中检索该搜索选项

这是否可行?我只是担心如果我缓存一个对象,当我从应用程序缓存中检索它时,它将不知道它使用的是什么连接,并且可能会拉入错误的数据


如果可能的话,我希望避免将其放在会话对象中。

这是可能的,但可能不是一个好主意,因为它根本不可扩展-您将为每个客户端弹出一个新连接,无论它们是否显示

也许你最好的选择是延迟加载设置——搜索页面上的第一次点击将配置加载到缓存或应用程序设置中,然后它就停留在那里

除此之外,回答你的问题是可能的。如果您使用的是亚音速3,只需使用ProviderFactory.GetProviderconnectionString、System.Data.SqlClient动态创建一个新的提供程序,然后针对它执行您的操作


对于亚音速2,您需要的是SharedConnectionScope。

感谢您提供有关延迟加载/缓存的提示。然而,当我检索缓存的对象时,它们会记得它们来自哪个数据库吗?也就是说,如果我访问这些对象上的任何延迟加载属性,它们是否会从正确的数据库中提取?或者我应该在shareddbconnectionscope中包装任何对象用法吗?我认为我不能使用provider方法,因为我将使用一些CodingHorror数据读取器,而不是对象-您希望缓存设置。