これをサポートする方法があるかどうかわかりませんが、使用していると思われるように、文字列パラメータ値をPostgresql citextデータ型にマップするのに問題があります。テキスト型特にDapperとPostgresql-citextのデータ型を使用する
、私はcitextのパラメータに取る関数を呼び出すようにしようとしている - 私は戻って取得エラーです:
var c = ConnectionManager<T>.Open();
string sql = @"select * from ""dbo"".""MyFunction""(@schemaName, @tableName);";
var param = new
{
schemaName = schema,
tableName = table
};
string insecureSalt = c.QueryMultiple(sql, param).Read<string>().FirstOrDefault();
ConnectionManager<T>.Close(c);
Error: Npgsql.PostgresException: 42883: function dbo.MyFunction(text, text) does not exist.
一致した署名は、関数dbo.MyFunction(citext、citext)でありますそのため、デフォルトマッピングを使用してもそれを見つけることはできません。
Npgsql - http://www.npgsql.org/doc/types.htmlによると、タイプとしてNpgsqlDbType.Citextを指定する必要がありますが、Dapperを使用してこれを行う方法が見つかりません。
は、ここでは、シェイから答えるために完全なソリューションをおかげで解決:
var c = ConnectionManager<T>.Open();
string sql = @"select * from ""dbo"".""MyFunction""(@schemaName, @tableName);";
var param = new
{
schemaName = new CitextParameter(schema),
tableName = new CitextParameter(table)
};
string insecureSalt = c.QueryMultiple(sql, param).Read<string>().FirstOrDefault();
ConnectionManager<T>.Close(c);
public class CitextParameter : SqlMapper.ICustomQueryParameter
{
readonly string _value;
public CitextParameter(string value)
{
_value = value;
}
public void AddParameter(IDbCommand command, string name)
{
command.Parameters.Add(new NpgsqlParameter
{
ParameterName = name,
NpgsqlDbType = NpgsqlDbType.Citext,
Value = _value
});
}
}
を動作するかどうかを確認これは完璧ですありがとうございました!これにはGoogleのヒット件数はあまりなかったので、それは永遠に見つかるだろう。 –