c# - 没有字母参数的 Postgresql 的 Dapper 存储过程

标签 c# postgresql stored-procedures plpgsql dapper

我正在尝试使用 C# 和 Dapper 调用用 plpgsql 编写的 Postgresql 存储过程,但我发现 Dapper 在将参数插入存储过程之前按字母顺序排列。有什么方法可以避免这种行为并以正确的顺序插入项目?

例如,以下调用将无法正确运行,因为它会将参数名称按字母顺序排列。我必须手动按字母顺序排列它们才能接通电话。

int map_id = conn.Query<int>(
"insert_color",
new
{
    zebra_name = new DbString { Value = slide_name },
    door_name = new DbString { Value = fov_name },
    foo_number = cycle_number,
    variable_path = new DbString { Value = image_path },
    random_path = new DbString { Value = meta_path },
    x = x,
    y = y,
    z = z,
    exposure = exposure,
    type_name = new DbString { Value = image_type },
    copy = copy
},
commandType: CommandType.StoredProcedure).First();

这是存储过程声明:

CREATE OR REPLACE FUNCTION insert_color(
zebra_name text, door_name text, foo_number integer,    
variable_path text, random_path text, 
x real, y real, z real, exposure real,
type_nametext, copy integer) RETURNS integer AS $$
    ...
$$ LANGUAGE plpgsql;

最佳答案

在内部,Dapper 使用反射来获取 param 对象的属性。具体来说,GetProperies(...) 的问题是,不能保证它们按特定顺序排列...

The GetProperties method does not return properties in a particular order, such as alphabetical or declaration order. Your code must not depend on the order in which properties are returned, because that order varies.

为了有点用处,他们选择按字母顺序排列参数,但不幸的是,没有办法确保参数按照您在类中的顺序出现。

关于c# - 没有字母参数的 Postgresql 的 Dapper 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11745709/

相关文章:

c# - 调试时如何回到断点?

c# - CompilerParameters.ReferencedAssemblies -- 添加对 System.Web.UI.WebControls 的引用

Javax 持久性在生产级别将 IDENTITY 更改为 SEQUENCE

c# - 具有 linq 数据上下文的存储过程返回值

java - 如何在hibernate 3中执行存储过程

c# - 如何在 T4 文本模板中使用自定义库/项目?

sql - 如何按多个行值分组?

postgresql - 如何使用 lib/pq 将 hstore 对象插入到 postgres

MySql - 性能问题可能是由动态 SQL 引起的吗?

c# - 将数据从一个控件绑定(bind)到另一个控件