小编Rik*_*Rik的帖子

nHibernate,ASP.NET MVC,s#arp架构和多个相同的数据库

我们目前正在开发基于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.为此,我有两个问题:

  1. 我们如何从URL中检索客户代码并将其放入每个请求的上下文对象中?当我们使用以下路线?

    <main-site-url>/{customercode}/{controller}/{action}/{id}

  2. 这种连接到几个相同数据库的方法是否有效,或者构建sessionfactory foreach客户数据库是否更好?

nhibernate asp.net-mvc multiple-databases s#arp-architecture

7
推荐指数
1
解决办法
640
查看次数