NHibernate中的依赖关系UPDATE / INSERT

时间:2013-01-18 14:22:38

标签: nhibernate

我正在尝试使用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的“单一”数据库事务/调用中执行此操作?

1 个答案:

答案 0 :(得分:0)

您有多种方法可以实现这一目标,

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

    session.CreateSQLQuery(@"EXECUTE PROCEDURE <procedure>").ExecuteUpdate();
    
  2. 但是,在插入具有新Sequence值的新Customer行之前,您似乎尝试增加字段(Sequence)。你为此create a trigger,并完全绕过NHibernate。

  3. 另一种选择是使用NHibernate映射来指定AUTO-INCREMENT字段,如this answer中的解释。

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

    public class IncrementInterceptor : EmptyInterceptor
    {
        bool OnSave(object entity, object id, object[] state, 
            string[] propertyNames, IType[] types)
        {
            // Increment Customer property value before inserting
        }
    }