Verwenden von Dapper mit BLOBs und SQL Server CE

blob dapper sql-server-ce

Frage

Wenn Sie BLOBs mit mehr als 8000 Datenbytes verwenden, müssen Sie Parameter.SqlDbType = SqlDbType.Image speziell Parameter.SqlDbType = SqlDbType.Image , damit es funktioniert ( wie hier erklärt ).

Dapper, wenn es ein byte[] Feld sieht, wird standardmäßig ein SqlDbType.Binary , was bedeutet, dass bei größeren Blobs die Einfügungen und Aktualisierungen mit einem SqlDbType.Binary fehlschlagen.

Gibt es eine elegante Lösung für dieses Problem? Die einzige Option, die ich sehen kann, besteht darin, die gesamte Transaktion mit ADO.NET-Methoden zu codieren.

Beliebte Antwort

Ich hatte das gleiche Problem. Wie folgt gelöst:

private static IDbCommand SetupCommand(IDbConnection cnn, IDbTransaction transaction, 
                                       string sql, Action<IDbCommand, object> paramReader, 
                                       object obj, int? commandTimeout, 
                                       CommandType? commandType)
{
    var cmd = cnn.CreateCommand();
    var bindByName = GetBindByName(cmd.GetType());
    if (bindByName != null) bindByName(cmd, true);
    if (transaction != null)
        cmd.Transaction = transaction;
    cmd.CommandText = sql;
    if (commandTimeout.HasValue)
        cmd.CommandTimeout = commandTimeout.Value;
    if (commandType.HasValue)
        cmd.CommandType = commandType.Value;
    if (paramReader != null)
    {
        paramReader(cmd, obj);
    }
    //CODTEC SISTEMAS
    foreach (System.Data.SqlServerCe.SqlCeParameter item in cmd.Parameters)
    {
        if (item.SqlDbType == System.Data.SqlDbType.VarBinary)
            item.SqlDbType = System.Data.SqlDbType.Image;
    }
    //CODTEC SISTEMAS
    return cmd;
}


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum