Utilisation de Dapper avec des objets BLOB et SQL Server CE

blob dapper sql-server-ce

Question

Lorsque vous utilisez des objets BLOB avec plus de 8 000 octets de données, vous devez définir spécifiquement Parameter.SqlDbType = SqlDbType.Image pour le faire fonctionner ( comme expliqué ici ).

Dapper, quand il voit un champ byte[] , SqlDbType.Binary défaut un SqlDbType.Binary , ce qui signifie que pour les blobs de plus grande taille, les insertions et les mises à jour échoueront avec une erreur de troncature des données.

Y a-t-il une solution élégante à ce problème? La seule option que je peux voir consiste à coder la transaction entière avec les méthodes ADO.NET.

Réponse populaire

J'ai eu le même problème. Résolu comme suit:

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;
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi