2010-04-13 57 views
0

我們有由觸發器設置的審計列。 由於在我的任職期限之外並且不受我的控制,因此我們使用通用用戶登錄,並執行'設置會話授權'以將用戶更改爲登錄用戶的db用戶。NHibernate和SetSessionAuth審計列

當我們轉換爲NHibernate時,它會創建一個全新的會話並將所有內容插入 當我們嘗試設置會話身份驗證時,因此我們將設置會話身份驗證關閉...

現在我們試圖找出讓NHibernate讓我們做'設置會話授權'而無需在我們的會議上回收會話,所以我們可以使用我們現有的基於觸發器的審計專欄的東西與舊的應用程序,以及我們的新NHibernate應用程序。

這不是一個理想的解決方案,或甚至是最好的方法,但它有可能嗎?

我希望有一個備用接口允許這種訪問。

有誰知道該怎麼做,或者你可以指點我和好的提示?

感謝,

Eric-

回答

1

可以繼承DriverConnectionProvider,做任何你需要創建一個連接時。

實施例:

public class MyConnectionProvider : DriverConnectionProvider 
{ 
    public override IDbConnection GetConnection() 
    { 
     var connection = base.GetConnection(); 
     var sessionAuthCommand = connection.CreateCommand(); 
     sessionAuthCommand.CommandText = "set session authorization " + GetUser(); 
     sessionAuthCommand.ExecuteNonQuery(); 
     return connection; 
    } 
} 

,然後配置NHiberate使用,作爲該連接提供者。

(GetUser是您將提供正確用戶的方法)

+0

工作正常! 我們很接近,我們有完全相同的代碼,但從驅動程序獲取命令而不是連接。但你的方式工作,我們沒有 謝謝! E- – 2010-04-14 18:00:17