Fluent NHibernate注册表函数SQLFunctionTemplate用法

Fluent NHibernate注册表函数SQLFunctionTemplate用法,nhibernate,fluent,dialect,Nhibernate,Fluent,Dialect,我已经看到这个机会被报道了至少六次,回复也差不多 我的问题是,我已经定义了一个MySQL数据库函数,我们将其称为“My_func(int val)returns int”,如果我直接在数据库上进行测试,它可以正常工作 我还让它通过我的存储库实现直接使用SQL pass,这没关系,但我宁愿通过Hql路由它,因为一些可怕的原因 所以。。。我有一个MySQL5方言设置来注册函数,我在通过预期约定进行解析时遇到了一些困难 我的理解是,我需要在函数名前面加上“dbo”。在函数注册的某个时候 像这样的, /

我已经看到这个机会被报道了至少六次,回复也差不多

我的问题是,我已经定义了一个MySQL数据库函数,我们将其称为“My_func(int val)returns int”,如果我直接在数据库上进行测试,它可以正常工作

我还让它通过我的存储库实现直接使用SQL pass,这没关系,但我宁愿通过Hql路由它,因为一些可怕的原因

所以。。。我有一个MySQL5方言设置来注册函数,我在通过预期约定进行解析时遇到了一些困难

我的理解是,我需要在函数名前面加上“dbo”。在函数注册的某个时候

像这样的,

//...
RegisterFunction("my_func", new SQLFunctionTemplate(NHibernateUtil.Int32, "my_func(?1)"));
//...
然后通过我的存储库

var value = repository.FindByHQL<int>("select my_func(2)").Single();
var value=repository.FindByHQL(“选择我的函数(2)”).Single();
其中FindByHQL返回一个IList

有没有想过为什么这行不通

我正在运行最新的WAMP(我想是2.1e)

足够的信息?如果我能提供任何进一步的细节,请告诉我

谢谢

迈克尔

select my_func(2)
无效的HQL,无论函数是否已注册

如果这是您的用例,您可以改用SQL


如果不是堆栈跟踪,则发布完整异常,这只是一个简化的示例。

也许我可以重新表述这个问题。对于我想对函数执行的操作,是否有一个有效的Hql?SQL路由目前正在运行,但我不太愿意以这种方式将数据库暴露在太多的环境中,因为这可能会破坏ORM并损坏数据库。@Michael:HQL需要一个实体来选择,所以,不是。你想得太多了:你有一个函数,出于某种原因,它留在数据库中;这不是犯罪。