2011-05-16 86 views
0

我在我的sql数据库上使用触发器来捕获表的变化信息,但它似乎与nhibernate有问题。nhibernate审计触发器错误

表中有几列和主键以及触发器。触发器看起来像这样

CREATE TRIGGER [dbo].[tr_Instrument_update] ON [dbo].[Instrument] FOR UPDATE AS 
BEGIN 
    INSERT [MyAudit].[audit].[Instrument] 
    SELECT 'Updated', i.* 
    FROM inserted 
    INNER JOIN [MyAudit].[dbo].[Instrument] i ON inserted.[InstrumentID] = i.[InstrumentID] 
END 

基本上每次更改都会将行复制到审计表中。我已经测试过,如果我直接通过SQL Management Studio中修改数据正确触发功能,我得到写入审计表中的数据,但是如果我通过我的应用程序更新,我得到如下:

NHibernate.StaleObjectStateException 是由用户代码未处理
消息=行被 另一个事务更新或删除(或者未保存值 映射是不正确的)

我假定这是因为触发器在另一个数据库更新另一个表中,有反正使其成为nhibernate由于此更改不会影响其任何数据,因此在我们的映射中我们没有提及此审核数据。

回答

0

找出触发器导致Nhibernate出于某种原因进行两个相同的更新调用。解决方案是在触发器内设置NOCOUNT ON。仍然不确定为什么nhibernate做两个更新!