Utilisation de Dapper avec des procédures stockées Oracle qui renvoient des curseurs

.net c# dapper oracle

Question

Comment procéder pour utiliser Dapper avec les procédures stockées Oracle qui renvoient des curseurs?

var p = new DynamicParameters();
p.Add("foo", "bar");
p.Add("baz_cursor", dbType: DbType.? , direction: ParameterDirection.Output);

Ici, DbType est System.Data.DbType qui n'a pas de membre Cursor. J'ai essayé d'utiliser DbType.Object mais cela ne fonctionne pas avec OracleClient et OracleDataAcess.

Quel serait un moyen possible d'utiliser OracleType ou OracleDbType à la place?

Réponse acceptée

Vous devrez implémenter:

 public interface IDynamicParameters
 {
    void AddParameters(IDbCommand command, Identity identity);
 }

Ensuite, dans le rappel AddParameters vous devez IDbCommand la commande IDbCommand en OracleCommand et ajouter les paramètres spécifiques à la base de données.


Réponse populaire

Merci pour la solution ici. J'ai réalisé la même chose avec un peu moins de code en utilisant un simple décorateur DynamicParameter:

public class OracleDynamicParameters : SqlMapper.IDynamicParameters
{
    private readonly DynamicParameters dynamicParameters = new DynamicParameters();

    private readonly List<OracleParameter> oracleParameters = new List<OracleParameter>();

    public void Add(string name, object value = null, DbType? dbType = null, ParameterDirection? direction = null, int? size = null)
    {
        dynamicParameters.Add(name, value, dbType, direction, size);
    }

    public void Add(string name, OracleDbType oracleDbType, ParameterDirection direction)
    {
        var oracleParameter = new OracleParameter(name, oracleDbType, direction);
        oracleParameters.Add(oracleParameter);
    }

    public void AddParameters(IDbCommand command, SqlMapper.Identity identity)
    {
        ((SqlMapper.IDynamicParameters)dynamicParameters).AddParameters(command, identity);

        var oracleCommand = command as OracleCommand;

        if (oracleCommand != null)
        {
            oracleCommand.Parameters.AddRange(oracleParameters.ToArray());
        }
    }
}



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