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

Это мой класс отображения:

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

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

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

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

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

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

1 Ответ

0 голосов
/ 20 февраля 2019

Кажется, я должен использовать "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();
...