Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过dapper将C#对象模型作为类型传递给postgresql函数_C#_Postgresql_Dapper - Fatal编程技术网

如何通过dapper将C#对象模型作为类型传递给postgresql函数

如何通过dapper将C#对象模型作为类型传递给postgresql函数,c#,postgresql,dapper,C#,Postgresql,Dapper,我试图通过dapper将C#对象模型作为postgresql类型传递给function,但出现以下错误: System.NotSupportedException:Npgsql或PostgreSQL本机不支持CLR类型System.Data.DataTable。要将其与PostgreSQL组合一起使用,您需要指定DataTypeName或对其进行映射,请参阅文档 我的postgresql类型是带有url属性的image 这是我在postgresql中的函数: CREATE OR REPLACE

我试图通过dapper将C#对象模型作为postgresql类型传递给function,但出现以下错误:

System.NotSupportedException:Npgsql或PostgreSQL本机不支持CLR类型System.Data.DataTable。要将其与PostgreSQL组合一起使用,您需要指定DataTypeName或对其进行映射,请参阅文档

我的postgresql类型是带有url属性的
image

这是我在postgresql中的函数:

CREATE OR REPLACE FUNCTION public.createapp(applicationid text, images image)
    RETURNS void
    LANGUAGE 'plpgsql'
AS $BODY$
BEGIN
    INSERT INTO app 
                     (
                         id,
                         applicationid,
                         images
                     )
                VALUES
                    (
                         uuid_generate_v4(),
                         applicationid,
                         images
                    );
    
END
$BODY$;
我的图像模型是:

public class Image
{
    public string Url { get; set; }
}
这是我的C#Dapper存储库代码:

var parameters = new DynamicParameters();
parameters.Add("applicationid", application.ApplicationId);
parameters.Add("images", application.Images);
var result = await GetDb().QueryFirstOrDefaultAsync("createapp", parameters, commandType: CommandType.StoredProcedure);

如何将此参数传递给我的函数?

您需要在启动时注册自定义类型,如下所示:

SqlMapper.AddTypeHandler(new PgTypeHandler<SomeType>());
SqlMapper.AddTypeHandler(新的PgTypeHandler());
然后在sql脚本参数中定义类型,如下所示: @图像::sometype

internal class PgTypeHandler<T> : SqlMapper.TypeHandler<T>
    {
        public override T Parse(object value)
        {
            return (T)value;
        }

        public override void SetValue(IDbDataParameter parameter, T value)
        {
            parameter.Value = value;
        }
    }
内部类PgTypeHandler:SqlMapper.TypeHandler
{
公共重写T解析(对象值)
{
返回(T)值;
}
公共覆盖无效设置值(IDbDataParameter参数,T值)
{
参数值=值;
}
}
更多文件:

我通过在startup.cs中添加MapComposite解决了这个问题:

NpgsqlConnection.GlobalTypeMapper.MapComposite(“图像”);
那是我的postgresql类型