我已完成Fluent NHibernate application using multiple databases的配置。 当我运行应用程序时,我看到会话正在所有数据库中创建相同的表。 我尝试使用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”要么不存在,要么不存在 有权使用它。
答案 0 :(得分: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());
}