web-dev-qa-db-fra.com

Vérifier si l'enregistrement existe avec Dapper ORM

Quel est le moyen le plus simple de vérifier si un enregistrement existe avec Dapper ORM?

Dois-je vraiment définir des objets POCO pour une requête pour laquelle je souhaite uniquement vérifier si un enregistrement existe?

12
webworm
int id = ...
var exists = conn.ExecuteScalar<bool>("select count(1) from Table where Id=@id", new {id});

devrait marcher...

30
Marc Gravell

Je pense que cela peut avoir un peu moins de temps système car il n'y a pas de conversion d'appel de fonction ou de type de données

int id = ...
var exists = connection.Query<object>(
    "SELECT 1 WHERE EXISTS (SELECT 1 FROM MyTable WHERE ID = @id)", new { id })
    .Any();
4
Kevin Finck

Vous pouvez avoir votre requête pour retourner un bool:

    [Test]
    public void TestExists()
    {
        var sql = @"with data as
                    (
                        select 1 as 'Id'
                    )
                    select CASE WHEN EXISTS (SELECT Id FROM data WHERE Id = 1)
                           THEN 1 
                           ELSE 0
                      END AS result 
                    from data ";

        var result = _connection.Query<bool>(sql).FirstOrDefault();

        Assert.That(result, Is.True);
    }
2
Void Ray
const string sql = "SELECT CAST(CASE WHEN EXISTS (SELECT 1 FROM MyTable WHERE Id = @Id) THEN 1 ELSE 0 END as BIT)";
bool exists = db.ExecuteScalar<bool>(sql, new { Id = 123 });
2
janeks malinovskis

Une autre option qui s’exécutera avec les enregistrements en double, c’est-à-dire ne demande pas l’identifiant de la table

bool exists = connection.ExecuteScalar<int>(
    "select count(1) from Table where notanId=@value", new { value = val})
     > 0;
0
Liam