如何正确使用Fluent NHibernate获取Oracle中的下一个序列?

3

我正在使用NHibernate / Fluent NHibernate与Oracle,并遇到了问题。 我定义了以下映射文件:

public OrderMap()
{
    Table("ORDERS");
    Id(x => x.OrderId, "ORDER_ID").GeneratedBy.Sequence("select ORDERS_SQ.nextval from orders");
    Map(x => x.CreatedBy, "CREATED_BY");
    Map(x => x.OrderStatusCd, "ORDER_STATUS_CD");
    Map(x => x.StoreGroupId, "STORE_GROUP_ID");
    Map(x => x.IsActive, "IS_ACTIVE");
    Map(x => x.OrderDate, "ORDER_DATE");
}

当我运行我的项目时,出现以下错误:
创建SessionFactory时使用了无效或不完整的配置。
如果我删除.GeneratedBy.Sequence("select ORDERS_SQ.nextval from orders");这一行,则应用程序会运行,但显然在保存记录时我不会得到下一个序列。我尝试过只使用.GeneratedBy.Sequence("ORDERS_SQ");,但似乎没有正确地工作。
请问有人可以告诉我如何正确地使用Fluent NHibernate来获取下一个可用序列吗?
我正在使用Fluent NHibernate 1.1和NHibernate 3.0 Beta。
谢谢。
1个回答

4

只需指定序列的名称:

Id(x => x.OrderId).Column("ORDER_ID").GeneratedBy.Sequence("ORDERS_SQ");

// Real working code:
Id(x => x.Id).GeneratedBy.Sequence("SEQ_Catalog1");

这是正确的,但我的问题部分原因是ID字段的数据类型不符合Fluent NHibernate在创建序列之前进行的整数类型检查。更改后一切正常运作。 - Chris Martindale
你知道在一次往返中是否有办法返回插入时生成的序列值吗? - Ruslan
@Tsar 当 NHibernate 插入一条记录时,Save() 方法会返回带有新 ID 的完整对象。在更新操作 Update() 中,它将更新给定的记录。 - rebelliard
谢谢。问题是我的表有另一个ID列(GUID),我不得不将其映射为Id,以便能够执行GeneratedBy.Sequence ,这在普通列映射中不可用。我猜你不能用Fluent做我需要做的事情 :( - Ruslan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接