我正在考虑将Subsonic与多租户ASP.net Web应用程序一起使用。有多个DB(每个客户端/实例一个)。用户使用域名后缀登录其用户名(例如user @ tenant1,user @ tenant2)。
然后,自定义成员资格提供程序将确定用户正在使用哪个数据库,并对其进行身份验证。 webapp中的所有用户启动的调用都将包含在SharedDbConnectionScope调用中,但我有一个关于缓存亚音项的问题。
基本上每个实例都会有一些很少更改的记录(搜索选项/配置)。我想在Application_Start事件中阅读这些内容,并将它们缓存到ApplicationState中。
在Application_Start事件中,它将循环遍历每个客户端数据库,使用SharedDbConnectionScope连接到每个数据库,并创建这些缓存的记录(例如Application('tenant1_search_obj')= subsonic_object
当用户加载搜索页面时,它会检查用户所在的域,然后从缓存中检索该搜索选项。
这可行吗?我只关心如果我缓存一个对象,当我从应用程序缓存中检索它时,它将不知道它使用了什么连接,并且可能会引入错误的数据。
如果可能的话,我想避免将其放在会话对象中。
答案 0 :(得分:0)
这是可能的,但可能不是一个好主意,因为它根本不会扩展 - 你会为每个客户端弹出一个新的连接,无论它们是否出现。
也许你最好的选择是“延迟加载”设置 - 首先在搜索页面上点击将配置加载到缓存或应用程序设置中并保留。
除此之外 - 回答你的问题是可能的。如果你正在使用SubSonic 3,只需使用ProviderFactory.GetProvider(connectionString,“System.Data.SqlClient”)动态创建一个新的提供者,然后对它执行你的东西。
对于SubSonic 2 - 您可以使用SharedConnectionScope。