0

我正在考虑将 Subsonic 与多租户 ASP.net Web 应用程序一起使用。有多个数据库(每个客户端/实例一个)。用户使用其用户名的域后缀登录(例如 user@tenant1、user@tenant2)。

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

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

在 Application_Start 事件中,它将遍历每个客户端数据库,使用 SharedDbConnectionScope 连接到每个 DB,并创建这些缓存记录(例如 Application('tenant1_search_obj') = subsonic_object

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

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

如果可能的话,我想避免把它放在会话对象中。

4

1 回答 1

0

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

也许您最好的选择是“延迟加载”设置 - 首先点击搜索页面将配置加载到缓存或应用程序设置中,然后它就保留在那里。

除此之外 - 回答你的问题是可能的。如果您使用的是 SubSonic 3,只需使用 ProviderFactory.GetProvider(connectionString, "System.Data.SqlClient") 即时创建一个新的提供程序,然后针对它执行您的内容。

对于 SubSonic 2 - SharedConnectionScope 是您想要的。

于 2010-03-22T20:14:41.723 回答