0

複数のデータベースを使用して Fluent NHibernate アプリケーションの構成を完了し ました。アプリケーションを実行すると、セッションがすべてのデータベースで同じテーブルを作成していることがわかります。Mapping クラスで次のコード行を使用して、作成を制限しようとしました

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」は存在しないか、使用する権限がありません。

4

1 に答える 1

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());
}
于 2012-07-02T06:33:10.250 に答える