2

プロジェクトで Dapper.NET を ORM レイヤーとして使用しています。ファイルのアップロードとダウンロード用に WebApis を作成しようとしています。しかし、私はそれを機能させることができません。私はすでに助けを探すのに十分なほど検索しましたが、何も見つかりませんでした。

単純に ADO.NET を使用している場合は、ファイル ストリームに VarBinary 型の SqlParameter を使用できます。しかし、Dapper.NET クエリ パラメータは単なる動的オブジェクトです。したがって、次のコードはレコードをファイルテーブルに挿入できません。

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();

スローされた例外: mscorlib.dll の 'System.NotSupportedException'

追加情報: System.IO.Stream 型のメンバー fileStream はパラメーター値として使用できません

誰かがこれを行ったことがありますか、または私が使用できるダッパー拡張プラグインを知っていますか?

4

1 に答える 1

8

DynamicParameters クラスを使用して、パラメーターのデータ型を指定する必要があります。この例では、Stream VARBINARY(MAX) という列を持つテーブル TEST を作成しました。

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);
    }
}
于 2016-09-06T17:53:43.130 に答える