我们目前正在开发基于NHibernate和ASP.NET MVC以及SQL Server后端的应用程序.由于我是NHibernate的新手,我试着去了解最佳实践.
我们的应用程序要求每个用户拥有自己的SQL Server数据库.这些数据库都具有相同的结构.
我们的客户使用客户代码进行识别,例如1500.
我们已经为nHibernate提供了一个自定义连接提供程序,我们已经在nServiceBus后端服务中使用了它:
public class DynamicConnectionProvider : DriverConnectionProvider
{
public override IDbConnection GetConnection()
{
IDbConnection conn = Driver.CreateConnection();
try
{
var messageExecutionContext = ServiceLocator.Current.GetInstance<ITTTContextProvider>().CurrentContext;
if (messageExecutionContext.CustomerId == 0)
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["dev"]
.ConnectionString;
}
else
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["default"]
.ConnectionString
.FormatWith(messageExecutionContext.CustomerId);
}
conn.Open();
}
catch (Exception)
{
conn.Dispose();
throw;
}
return conn;
}
}
Run Code Online (Sandbox Code Playgroud)
此连接提供程序检查上下文对象中的客户代码,并相应地设置连接字符串.
我们计划提供一个HttpContext识别ITTTContextProvider.为此,我有两个问题:
我们如何从URL中检索客户代码并将其放入每个请求的上下文对象中?当我们使用以下路线?
<main-site-url>/{customercode}/{controller}/{action}/{id}
这种连接到几个相同数据库的方法是否有效,或者构建sessionfactory foreach客户数据库是否更好?
nhibernate asp.net-mvc multiple-databases s#arp-architecture