簡體   English   中英

不含字母參數的帶有Postgresql的Dapper存儲過程

[英]Dapper stored procedures with Postgresql without alphabetical parameters

我正在嘗試使用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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM