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;
    }
}

Этот провайдер подключения проверяет код клиента в объекте контекста и соответствующим образом устанавливает строку подключения.

Мы планируем предоставить HttpContext ITTTContextProvider . По этому поводу у меня есть два вопроса:

  1. Как мы можем получить код клиента из URL-адреса и поместить его в наш объект контекста для каждого запроса? когда мы используем следующий маршрут?

    / {customercode} / {controller} / {action} / {id}

  2. Действителен ли этот метод подключения к нескольким идентичным базам данных или лучше Практика создания клиентской базы данных sessionfactory для каждого клиента?

7
задан Rik 3 November 2010 в 15:07
поделиться