我正在尝试使用Fluent NHibernate在Oracle表中映射PK。 PK是一个字符串(无法更改数据库模式)。 PK由序列产生。这是一个遗留数据库,表上没有触发器,只有序列。
使用Fluent NHibernate,我正在尝试
this.Id(x => x.Id)
.Column("FOO_ID")
.Not.Nullable()
.GeneratedBy
.SequenceIdentity("SEQ");
但正在接受
标识类型必须是整数(int,long,uint,ulong)
因为SequenceIdentity()
检查该值是否为整数。
如何使用字符串PK实现此目的?具有完整ID的相同方法有效。
答案 0 :(得分:2)
我不知道Oracle支持字符串序列。但无论如何,我不相信NHibernate支持开箱即用的字符串序列。
但是你可以create your own ID generators in NHibernate。
您可能会发现需要类似于内置SequenceGenerator类的内容,因此我将从该代码开始,看看您能想出什么。
答案 1 :(得分:2)
解决方案是
CustomSqlType("VARCHAR2")
PK id映射:
this.Id(x => x.Id)
.Column("FOO_ID")
.Not.Nullable()
.GeneratedBy.Sequence("SEQ_FOO")
.CustomSqlType("VARCHAR2");