0

Я закончил настройку Fluent NHibernate application using multiple databases. Когда я запускаю приложение, я вижу, что сеанс создает те же таблицы во всех базах данных. Я попытался ограничить создание с помощью следующей строки кода в классе MappingКак ограничить Entites до конкретной базы данных в нескольких базах данных FluentNhibernate Application

Schema("Monkey") <- in monkey ClassMap

Schema("Banana") <- in Banana ClassMap

SQL-запросов Сформирован:

if exists (select * from dbo.sysobjects where id = object_id(N'Banana.[Banan 
a]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Banana.[Banana] 

    if exists (select * from dbo.sysobjects where id = object_id(N'Monkey.[Monke 
y]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table Monkey.[Monkey] 

    create table Banana.[Banana] (
     Id INT IDENTITY NOT NULL, 
     Color NVARCHAR(255) null, 
     primary key (Id) 
    ) 

В вышеприведенном пункте отладчик перехвачена ошибка:

Указанное имя схемы «Banana» либо не существует, либо у вас нет разрешения .

ответ

1

только добавить соответствующие таблицы в sessionfactory для каждой базы данных. Я бы разделил их на пространства имен: «BananaDbMaps» и «MonkeyDbMaps»

foreach (var dataBase in dataBases) 
{ 
    var model = new PersistenceModel(); 
    foreach (var type in Assembly.GetExecutingAssembly().GetExportedTypes()) 
    { 
     if (!type.IsInterface && !type.IsAbstract && type.IsSubclassOf(typeof(IMappingProvider)) && type.Namespace.EndsWith(dataBase.Key + "DbMaps")) 
     { 
      model.Add(type); 
     } 
    } 
    config = Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2008.ConnectionString(dataBase.Value)) 
     .Mappings(m => m.UsePersistenceModel(model)) 
     .BuildConfiguration(); 
    _allFactories.Add(dataBase.Key, config.BuildSessionFactory()); 
} 
+0

Firo Спасибо за решение. Кажется, это решение проблемы, которую я понимаю из технического анализа, но метод UsePersistenceModel (model) не распознается в моем решении. Я попытался это сделать, но я не смог найти соответствующую сборку для этого. – viento

+0

Я использовал FNH 1.2 и это часть 'm' в лямбда – Firo

+0

да, вы правы. И я назвал карты классов согласно вашему предложению. Но цикл не входит в условие if. Model.Add (type) ' – viento