пользовательские функции sql с беглым nhibernate - PullRequest
1 голос
/ 07 июня 2011

Как я могу использовать некоторые свои функции SQL с Fluent NHibernate?

У меня есть некоторые функции SQL, например:

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

И я хочу использовать эту функцию в некоторых моих критерияхзапросы.Могу ли я сделать это и как?

1 Ответ

0 голосов
/ 23 апреля 2016

Было несколько способов сделать это самым простым, что я обнаружил, - предоставить собственный 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>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...