【问题标题】:custom sql functions with fluent nhibernate具有流畅的 nhibernate 的自定义 sql 函数
【发布时间】:2011-06-07 11:14:49
【问题描述】:
如何在 Fluent NHibernate 中使用我的一些 SQL 函数?
我有一些SQL函数,例如:
CREATE FUNCTION [dbo].[TestFunction]
(
@value1 int,
@vlaue2 int
)
RETURNS int
AS
BEGIN
RETURN @value1 + @value2
END
我想在我的一些条件查询中使用这个函数。我可以这样做吗?如何做?
【问题讨论】:
标签:
sql-server
nhibernate
fluent
【解决方案1】:
有几种方法可以做到这一点,我发现最简单的方法是提供一个自定义 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>();