Есть пара моментов настройки / расширения, которые вы можете рассмотреть.
Не думаю, что вы сможете совместно использовать одну и ту же фабрику сессий для арендаторов. Я думаю, что самое простое, что можно сделать, - это обновить сопоставления на основе клиента, связанного с фабрикой сеансов.
public class EntitytMap:ClassMap<Entity>
{
public EntitytMap()
{
Table("TableName");
Schema(Session.TenantName);
Id(p => p.Id, "Id").GeneratedBy.Identity();
Если вы хотите, чтобы каждый арендатор имел собственную схему, это должно работать. Если вы хотите сохранить схему такой же, но у вас есть префикс в таблице, вы можете изменить ее на:
public class EntityMap:ClassMap<Entity>
{
public EntityMap()
{
Table(Session.TenantPrefix + "TableName");
Schema("SCHEMA");
Id(p => p.Id, "Id").GeneratedBy.Identity();
Вы также можете указать свой собственный ConnectionProvider. Извлеките класс из NHibernate.Connection.DriverConnectionProvider и сделайте ссылку на свою собственную копию в файле конфигурации nhibernate вместо:
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
использовать
<property name="connection.provider">My.Project.DAL.NHibernate.CustomConnectionProvider, My.Project.DAL</property>
Когда вызывается провайдер GetConnection, вы можете указать собственную строку соединения на основе арендатора.