有幾種方法可以做到這一點,我發現最簡單的方法就是提供一個自定義的SQL方言,用於註冊我的功能,然後使用Session.CreateSQLQuery
來執行它。
下面是一個簡單的自定義方言:
public class CustomMsSql2012Dialect : MsSql2012Dialect
{
public CustomMsSql2012Dialect()
{
RegisterFunction("dbo.testfunction", new SQLFunctionTemplate(NHibernateUtil.Int32, "dbo.TestFunction(?1, ?2)"));
}
}
注意,傳遞給RegisterFunction
第一個字符串函數名都是小寫的,在我的研究,我碰到有人認爲這是必需的,但我可以」不幸的是,現在找到那篇文章來引用。
如何使用方言:
MsSqlConfiguration.MsSql2012.ConnectionString("connectionStringHere")
.Dialect<EkaMsSql2012Dialect>();
如何調用該函數:
Session.CreateSQLQuery("SELECT dbo.TestFunction(:value1, :value2)")
.SetString("value1", 5)
.SetString("value2", 6)
.UniqueResult<int>();