Многопользовательское приложение NHibernate с отдельной схемой SQL Server для каждого клиента

Я пишу новое мультитенантное приложение WCF RIA. Я планирую создать общую базу данных с отдельной схемой SQL Server для каждого клиента. Я хотел бы использовать NHibernate для объектно-рационального сопоставления.

Конфигурация схемы SQL Server в классах сопоставления не помогает, поскольку она статична и для каждого клиента потребуется один набор классов сопоставления.

Можно ли динамически настроить ISession, какая схема SQL Server должна использоваться для сопоставления объектов с таблицами?


person Branko    schedule 31.12.2010    source источник
comment
есть ли связь между каждой схемой / клиентом?   -  person gbn    schedule 31.12.2010
comment
Да, у каждого клиента (арендатора) будет отдельная схема.   -  person Branko    schedule 31.12.2010


Ответы (2)


Вам нужно будет создать отдельный SessionFactory для каждого клиента, соответствующим образом изменив свойство default_schema в конфигурации.

person Diego Mijelshon    schedule 31.12.2010
comment
Мне очень нравится идея с отдельным SessionFactory для каждого клиента. Таким образом, я также могу использовать отдельное имя пользователя для каждого клиента и давать ему разрешения только на объекты из одной схемы. - person Branko; 03.01.2011

Если нет связи между клиентами, возможно, имеет смысл иметь отдельные базы данных.

Не в последнюю очередь, если клиент A говорит «пожалуйста, восстановите», вы не уничтожите данные другого клиента.

person gbn    schedule 31.12.2010
comment
Полностью с вами согласен. Проблема в том, что будет много мелких клиентов. Это оставляет мне множество небольших баз данных, которые нужно администрировать и оплачивать (я планирую использовать SQL Azure). - person Branko; 31.12.2010
comment
Ах хорошо. Тогда это не моя лучшая идея - person gbn; 31.12.2010
comment
Я собираюсь начать с одной базы данных, но при необходимости поддержу распространение клиентов по большему количеству баз данных. Каждая база данных будет содержать данные для ряда клиентов в зависимости от их использования. При такой настройке одна база данных может содержать данные только для одного клиента, если они в этом нуждаются и хотят доплатить. - person Branko; 31.12.2010