我在我的 Asp.net / MVC 2 / 多租户应用程序中使用 Castle ActiveRecord,并将 SQL Server 作为我的后端。
对于每个登录的用户,应用程序会在运行时动态加载相应的数据库,如下所示:
IDictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("connection.driver_class", "NHibernate.Driver.SqlClientDriver");
properties.Add("dialect", "NHibernate.Dialect.MsSql2005Dialect");
properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");
properties.Add("proxyfactory.factory_class", "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle");
properties.Add("connection.connection_string", strDBConnection);
InPlaceConfigurationSource source = new InPlaceConfigurationSource();
source.Add(typeof(ActiveRecordBase), properties);
ActiveRecordStarter.Initialize(new System.Reflection.Assembly[] { asm1 }, source);
该strDBConnection
字符串来自另一个包含用户信息、相应数据库等的小型数据库。
设想:
- 当用户登录时,他的数据库被加载,他可以做他的 CRUD 工作——没有问题!
- 另一个用户(从另一台远程机器)登录,他的数据库被加载——没有问题!
- 现在,当第一个用户从 DB 中读取数据时,他会从第二个用户的 DB 中看到新数据
我对这种行为的一点理解是:ActiveRecordStarter
是一个静态对象。
有人可以帮我解决这种情况吗?
预期的行为:每个用户应该只访问他自己的数据库,安全地,并行/同时。
非常感谢 !