2011-05-16 62 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做兩個更新!