アルファベットのないパラメータを持たない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