如何使用NHibernate Mapping或Fluent NHibernate创建多列索引和/或唯一约束。
答案 0 :(得分:14)
为多个属性
分配索引/唯一约束名称<property name="A" index="AB" />
<property name="B" index="AB" />
理论上它也适用于在同一个实体上拥有多个索引:
<property name="A" index="AB, ABC" />
<property name="B" index="AB, ABC" />
<property name="C" index="ABC" />
But there is a bug.我还写了一个补丁。如果您对此感兴趣,请为错误投票或添加评论或其他内容。
修改:刚检查the bug发生的事情。它在版本2.1.0中修复,因此它现在应该完美地工作。非常感谢伟大的NHibernate开发团队!
答案 1 :(得分:14)
很老,但是我遇到了同样的问题,我还有一些事情需要补充:
Stefan Steinegger正确回答了非 - 唯一的多列索引,但遗漏了唯一多列索引的代码。对于那些你可以使用:
<property name="A" unique-key="AB" />
<property name="B" unique-key="AB" />
所以,基本上相同但具有不同的属性名称。
有趣的是,对于唯一索引,NHibernate会为密钥生成自己的名称,但对于非唯一索引,它会使用您提供的任何内容。
例如,上面的代码不会生成名为“AB”的唯一索引,而是UQ__TableName__7944C87104A02EF4
。
这在NHibernate文档的section 19.1.1中有记载:
某些代码接受
index
属性来指定名称 该列的索引。unique-key
属性可用于分组 单个单元键约束中的列。目前,指定 unique-key属性的值是 not 用于命名约束, 仅对映射文件中的列进行分组。
但是以下内容:
<property name="A" index="AB" />
<property name="B" index="AB" />
只会生成一个名为“AB”的索引。