NHibernate在同一个应用程序中使用2个模式?

时间:2012-07-04 14:22:25

标签: c# nhibernate

想象一下,您正在使用NHibernate编写一个大型应用程序,并且您希望有两个单独的模式(顺便使用Sql Server)

  1. Application_System(与系统,配置表,用户表等相关的所有表)
  2. Application_Data(用户与系统交互时存储/检索的所有实际数据)
  3. 现在我一直在尝试在NHibernate中找到一种简单干净的方法来实现这一点,并认为我通过使用Catalog和Schema属性找到了解决方案,例如:

    Catalog("Application_System");
    Schema("dbo");
    Table("SystemSettings")
    

    会为Application_System.dbo.SystemSettings生成sql。这种方法有效但如果我定义了2个目录,那么hbm2ddl.auto的创建/删除表功能将停止工作。现在我得出的结论是,我可能会滥用Catalog和Schema属性来寻找它不适合的东西。然而,我似乎无法找到一种简单的方法来实现不涉及一些复杂的脚手架的相同事物。

    任何帮助将不胜感激。我无法相信NHibernate不支持这种开箱即用的意思,这是一个相当基本的要求。

2 个答案:

答案 0 :(得分:0)

SchemaExport不支持创建模式/目录ootb,但您可以使用xml,FluentNHibernate或MappingByCode中的辅助对象自行添加create schema / catalog ddl。请注意,必须首先添加辅助对象。

答案 1 :(得分:0)

好吧,我找到了一个我感到满意的中途宿舍。 ISession有一个Connection属性,它公开一个ChangeDatabase(string databaseName)方法,允许您更改会话指向的数据库。

我的架构导出仍然很糟糕,因为最终它不知道哪个对象适用于哪个数据库,因此会尝试将其全部保存到配置中定义的数据库。

你赢了一些你失去了一些。