Fluent nHibernate: использовать одни и те же файлы сопоставления для таблиц с одинаковой структурой в разных схемах - программирование

Fluent nHibernate: использовать одни и те же файлы сопоставления для таблиц с одинаковой структурой в разных схемах

Это мой картографический класс:

class MyTableMap : ClassMap<MyTable>
{
    public MyTableMap()
    {
        Schema("mySchema");
        Id(x => x.id);
        Map(x => x.SomeString);
    }
}           

Это отлично работает для таблицы ([mySchema]. [MyTable]) в моей первой базе данных.

Но эта таблица ("MyTable") существует (на самом деле много) в разных базах данных, но по любой причине схема всегда называется по-разному (это я не контролирую):

Таким образом, в базе данных "OtherDB" есть таблица [SomeOtherSchema]. [MyTable] с той же структурой, что и [mySchema]. [MyTable] в первой базе данных.

По понятным причинам я не хочу создавать разные классы отображения для каждой базы данных.

Итак: есть ли способ изменить схему класса отображения, поэтому мне просто нужно создать один класс отображения (без использования сингелтона!)?

4b9b3361

Ответ 1

Кажется, я должен использовать "DefaultSchema". Поэтому я использовал этот код отображения:

class MyTableMap : ClassMap<MyTable>
{
    public MyTableMap()
    {
        Id(x => x.id);
        Map(x => x.SomeString);
    }
}           

Когда я собираю sessionFactory, я должен установить DefaultSchema:

var configure = Fluently.Configure();
var dbConfig = MsSqlConfiguration.MsSql2012.ConnectionString("Data Source=" + dataSource +
                                                            ";Initial Catalog=" + database +
                                                            ";Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False");

//Here I can set the default schema used by my mappings
var dbConfigWithSchema = dbConfig.DefaultSchema(database);  
var fluentDb = configure.Database(dbConfigWithSchema);

var fluentMap = fluentDb.Mappings(mappings);
return fluentMap.BuildSessionFactory();