1

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

  1. Application_System(与系统相关的所有表、配置表、用户表等)
  2. Application_Data(用户与系统交互时存储/检索的所有实际数据)

现在我一直试图在 NHibernate 中找到一种简单干净的方法来执行此操作,并认为我已经通过使用 Catalog 和 Schema 属性找到了解决方案,例如:

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

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

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

4

2 回答 2

0

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

于 2012-07-04T18:56:02.657 回答
0

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

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

你赢了一些,你输了一些。

于 2012-07-05T09:26:33.160 回答