No se puede insertar la secuencia de archivos en la tabla de archivos SQL utilizando Dapper.NET

ado.net c# dapper dapper-extensions sql

Pregunta

Estoy usando Dapper.NET como capa ORM en mi proyecto. Intento escribir WebApis para cargar y descargar archivos. Sin embargo, no puedo hacerlo funcionar. Ya busqué lo suficiente para buscar ayuda, pero no pude encontrar ninguna.

Si simplemente estuviera usando ADO.NET, podría haber usado SqlParameter de tipo VarBinary para la secuencia de archivos. Pero los parámetros de consulta de Dapper.NET son solo objetos dinámicos. Entonces, el código siguiente no puede insertar el registro en la tabla de archivos.

var fileStream = await Request.Content.ReadAsStreamAsync();

var streamId = Guid.NewGuid();
var fileName = streamId.ToString();

var sql = @"Insert into Attachments(stream_id, file_stream, name)
            Values(@streamId, @fileStream, @fileName)";

using (var db = new SqlConnection(AppConfig.ConnectionString))
{
    await db.ExecuteAsync(sql, new { streamId, fileStream, fileName);
}

fileStream.Close();

Excepción lanzada: 'System.NotSupportedException' en mscorlib.dll

Información adicional: el miembro fileStream de tipo System.IO.Stream no se puede usar como un valor de parámetro

¿Alguien ha hecho esto o estar al tanto de cualquier complemento de extensión apuesto que pueda usar?

Respuesta aceptada

Debe usar la clase DynamicParameters y especificar el tipo de datos del parámetro. Para el ejemplo, creé una tabla TEST con una columna llamada Stream VARBINARY (MAX)

            using (var connection = new SqlConnection(Properties.Settings.Default.connectionString))
            {
                connection.Open();
                using (var fs = File.Open(Properties.Settings.Default.filePath, FileMode.Open))
                {
                    var sql = "INSERT INTO TEST (Stream) VALUES (@fs)";

                    var dParams = new DynamicParameters();
                    dParams.Add("@fs", fs, DbType.Binary);

                    connection.Execute(sql, dParams);
                }
            }


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué