重新映射 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程序

如何使用 NHibernate 模式生成更新数据库表模式?

如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?

如何在运行时从 nhibernate 映射文件生成实体类

如何从 NHibernate 映射文件生成“迁移”DDL?

NHibernate教程(19) —— 一级缓存