À l'aide de Dapper QueryAsync pour retourner un objet unique

Malheureusement notre DB, est datée des années 90. Son héritage est si forte que nous sommes encore à l'aide de SP afin de faire la plupart des opérations CRUD. Cependant, il semble que Dapper convient assez bien et nous avons tout juste commencé à jouer avec.

Cependant, je suis un peu inquiet de la façon de gérer une seule ligne de données. Dans ce cas, je suis en utilisant QueryAsync à l'appel de la SP passage d'un ID. Comme vous pouvez le voir, l'objet est de retourner à l'extérieur de l'appel asynchrone(*).

Je vais être en difficulté? Si oui, est-ce que quelqu'un sait comment le gérer? Dois-je utiliser un QuerySync à la place?

public class SchemePolicyRepository : ISchemePolicyRepository
{
    private readonly SqlConnection sql;

    protected SchemePolicyRepository(SqlConnection connection)
    {
        sql = connection;
    }
    ... 
    public async Task<SchemePolicy> GetById(string id)
    {
        var schemePolicy = await sql.QueryAsync<SchemePolicy>("risk.iE_GetSchemePolicyById",
            new { Id = id },
            commandType: CommandType.StoredProcedure);
        return schemePolicy != null ? schemePolicy.FirstOrDefault() : null;
    }
    ...
}

(*)La SchemePolicy objet renvoyé par FirstOfDefault() n'est pas une méthode asynchrone.

Comme vous pouvez le voir, l'objet n'est pas de retour de l'appel asynchrone. Qu'est-ce que cela signifie? Vous dire que votre requête ne fonctionne pas?
Il n'y a rien de mal avec des procédures stockées, elles sont SQL tout comme le lourd, plus lent Orm générer.
Merci @YuvalItzchakov, j'ai mis à jour le post
vous avez raison, c'est pourquoi nous avons préféré utiliser Dapper, au lieu de EF. La vieille mode ADO.NET est encore quelque chose que nous aimons utiliser ici 🙂
Donc, fondamentalement, vous êtes inquiet parce que FirstOrDefault n'est pas asynchrone?

OriginalL'auteur Stefano Magistri | 2015-07-06