1

我在使用旧版 Oracle DB 开发的应用程序中使用 Fluent NHibernate(我对它相当陌生)。数据库具有由外键和数据库生成的列组成的复合键。通过使用表名和其他外键部分之一调用 DB 函数来提供生成的列。生成的复合键部分不是唯一的,我无法更改。生成的键部分也经常用作其他表的外键。

如果我创建实体映射来指定数据库中的复合键,那么我们不能使用任何身份生成策略,这会破坏工作单元

如果我创建仅将生成的列指定为主键的实体映射,那么我可以使用 trigger-identity 来生成 id,并且我得到了工作单元,但是当我想要更新或访问一个子集合:键的其他部分不包含在 WHERE 语句中。

谁能给我任何关于如何进行的建议?

  • 如果我坚持使用映射复合键,我可以扩展 nhibernate 以输出 SQL 以使用触发器身份吗?如果是这样,你能建议一个起点吗?
  • 如果我映射单个列键,我可以在 HasMany 映射和更新的 WHERE 子句中包含其他属性吗?
4

1 回答 1

1

不幸的是,正如您已经发现的那样,根本不支持此设置。

我的建议是手动执行 INSERTS(例如,使用自定义 SQL)。是的,这打破了 UoW,但也是如此identity

于 2012-07-10T11:18:14.770 回答