c# - 在 SQLQuery 中使用 ":="

标签 c# postgresql nhibernate

我有一个查询使用命名参数调用 postgres 存储过程。该过程可以采用许多参数,其中大部分都有默认值,我只想使用几个。 SQL 看起来像这样:

SELECT {(mytable).*} FROM myStoredProc(:p1, _namedParam := TRUE);

我在 p1 中绑定(bind)并将 mytable 添加为一个实体。但是,我得到了 NHibernate.QueryException : Not all named parameters have been set: [''] -- 它似乎来自于命名参数中的 :=

有没有办法避开那个冒号,这样我就可以通过这个了?我已经绑定(bind)了所有字符串等,但我不认为我可以像这样绑定(bind)语法,所以我需要 NHibernate 停止提示这个非参数。这个存储过程需要大约十几个参数,我在这里设置的是最后一个,所以我不想在我的 C# 代码中显式插入所有默认值。

最佳答案

而不是 := (在 documentation 中被称为“旧语法”)你可以使用 => :

SELECT {(mytable).*} FROM myStoredProc(:p1, _namedParam => TRUE);

现在我不记得在 PostgreSQL 语法中使用冒号的任何其他地方,除了像 <value>::<type> 这样的类型转换。 (例如 '1'::integer)但它可以简单地替换为更通用的语法,如 cast(<value> as <type>)或很快 <type> <value> .

关于c# - 在 SQLQuery 中使用 ":=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51178912/

相关文章:

c# - 获取编辑器窗口的选定文本..visual studio 扩展

c# - 如何从 Windows 64 位注册表中检索应用程序列表

nhibernate - 流畅的 nhibernate 一级缓存未按预期工作

c# - 我如何在 NHibernate 中进行通用字段和组件级更改跟踪?

c# - AppDomain.CreateInstance 和 Activator.CreateInstance 有什么区别?

c# - 使用其 ID 获取列表

postgresql - 从 typeorm 实体中删除列

node.js - 如何在 sequelize 中存储模型实例上的其他信息?

ruby-on-rails - 按月份编号查找特定月份的所有记录(例如 1 = 一月)

c# - NHibernate:在提交事务之前调用 Session.Flush() 是否有效?