重新映射 NHibernate ID 生成
Posted
技术标签:
【中文标题】重新映射 NHibernate ID 生成【英文标题】:Remapping NHibernate ID Generation 【发布时间】:2011-07-27 18:41:54 【问题描述】:我们有一个当前支持 Oracle 和 SQL Server 数据库的应用程序。我们正在从另一个 ORM 迁移到 NHibernate。
我们的 ID 映射(用于 oracle)最终看起来像这样:
<id name="Id" column="FoozId">
<generator class="native">
<param name="sequence">Fooz_SEQ</param>
</generator>
</id>
我们不能简单地使用“本机”,因为它使用单个数据库范围的序列,并且我们需要每个实体类型一个。
我们正在尝试使用here 讨论过的重新映射器的想法,它似乎对于修剪超过 30 个字符的表名等事情已经足够好......但我们无法弄清楚如何删除我们通过映射时的序列参数。我们仍然希望使用 SQL Server 的本机生成器类,但省略了序列名称。
这是否可行,还是我们需要生成两组映射?
【问题讨论】:
【参考方案1】:这似乎在我们设置的测试项目中有效:
if (classMap.Identifier.IsSimpleValue)
var simpleVal = classMap.Identifier as SimpleValue;
simpleVal.IdentifierGeneratorProperties.Remove("sequence");
不确定这是否是最好的方法,但它确实有一些简单的集成测试通过了带有 Oracle 映射的 SQL Server 数据库。
【讨论】:
以上是关于重新映射 NHibernate ID 生成的主要内容,如果未能解决你的问题,请参考以下文章
Nhibernate学习教程-- 第一个NHibernate程序