2011-06-07 76 views
1

如何使用我的SQL函數和Fluent NHibernate?流利的nhibernate自定義sql函數

我有一些SQL函數,例如:

CREATE FUNCTION [dbo].[TestFunction] 
(
    @value1 int, 
    @vlaue2 int 
) 
RETURNS int 
AS 
BEGIN 
    RETURN @value1 + @value2 
END 

我whant在我的一些標準的查詢使用此功能。我可以這樣做嗎?

回答

0

有幾種方法可以做到這一點,我發現最簡單的方法就是提供一個自定義的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>();