Dapper almacenó procedimientos con Postgresql sin parámetros alfabéticos

c# dapper plpgsql postgresql stored-procedures

Pregunta

Estoy intentando llamar a un procedimiento almacenado de Postgresql escrito en plpgsql usando C # y Dapper, pero he encontrado que Dapper alfabetiza los parámetros antes de insertarlos en el procedimiento almacenado. ¿Hay alguna manera de evitar este comportamiento y tener los elementos insertados en el orden correcto?

Por ejemplo, la siguiente llamada no se ejecutaría correctamente porque alfabetizaría los nombres de los parámetros. Tengo que alfabetizarlos manualmente para que la llamada se complete.

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();

Aquí está la declaración del procedimiento almacenado:

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;

Respuesta aceptada

Internamente, Dapper usa la reflexión para obtener las propiedades del objeto param. Específicamente, el problema de GetProperies(...) es que no se garantiza que estén en un orden particular ...

El método GetProperties no devuelve propiedades en un orden particular, como orden alfabético o de declaración. Su código no debe depender del orden en que se devuelven las propiedades, porque ese orden varía.

Para ser algo útil, eligieron ordenar los parámetros alfabéticamente, pero desafortunadamente no hay forma de asegurar que los parámetros aparezcan en el orden en que los tienen en la clase.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué