我正在尝试使用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的“单一”数据库事务/调用中执行此操作?
答案 0 :(得分:0)
您有多种方法可以实现这一目标,
您可以使用NHibernate的CreateSQLQuery
将文字SQL传递给数据库,这样就可以执行存储过程而不用担心单个语句。
session.CreateSQLQuery(@"EXECUTE PROCEDURE <procedure>").ExecuteUpdate();
但是,在插入具有新Sequence
值的新Customer
行之前,您似乎尝试增加字段(Sequence
)。你为此create a trigger,并完全绕过NHibernate。
另一种选择是使用NHibernate映射来指定AUTO-INCREMENT
字段,如this answer中的解释。
最后,您可以实现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
}
}