사전 순 매개 변수없이 Postgresql을 사용하는 Dapper 저장 프로 시저

c# dapper plpgsql postgresql stored-procedures

문제

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(...) 문제는 특정 순서로 보장되지 않습니다 ...

GetProperties 메서드는 사전 순 또는 선언 순서와 같은 특정 순서로 속성을 반환하지 않습니다. 순서가 다르기 때문에 코드가 반환되는 속성 순서에 의존해서는 안됩니다.

다소 유용하기 때문에 매개 변수를 사전 순으로 정렬하기로 선택했지만 유감스럽게도 매개 변수가 클래스에있는 순서대로 나타나는지 확인할 방법이 없습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow