0

我正在尝试使用 NHibernate 实现以下 TSQL 代码(当前包含在存储过程中)。如您所见,系统已经实现了一些自定义排序。

DECLARE @NextSequence bigint;

UPDATE [dbo].[Sequencer] SET @NextSequence = Sequence = Sequence + 1;

INSERT INTO [dbo].[Customers] (Id,Name) VALUES (@NextSequence, 'Jack');

INSERT语句取决于设置变量UPDATE的方式和方式很重要。@NextSequence

如何在使用 NHibernate 的“单个”数据库事务/调用中执行此操作?

4

1 回答 1

0

您有多种选择来实现这一目标,

  1. 您可以使用 NHibernateCreateSQLQuery将文字 SQL 传递给数据库,这样您就可以执行存储过程而不必担心单个语句。

    session.CreateSQLQuery(@"EXECUTE PROCEDURE <procedure>").ExecuteUpdate();
    
  2. 但是,您似乎正在尝试Sequence在插入具有新值的新Customer行之前增加字段 ()。Sequence您为此创建了一个触发器,并完全绕过 NHibernate。

  3. 另一种选择是使用 NHibernate 映射来指定一个AUTO-INCREMENT字段,如本答案中所述。

  4. 最后,您可以实现 NHibernateInterceptor来更新OnSave事件的值,

    public class IncrementInterceptor : EmptyInterceptor
    {
        bool OnSave(object entity, object id, object[] state, 
            string[] propertyNames, IType[] types)
        {
            // Increment Customer property value before inserting
        }
    }
    
于 2013-01-18T14:55:51.537 回答