NHibernate映射GeneratedBy.SequenceIdentity(" seq")其中PK是一个字符串

时间:2014-11-06 15:32:47

标签: oracle nhibernate fluent-nhibernate identity

我正在尝试使用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的相同方法有效。

2 个答案:

答案 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");