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?
int id = ...
var exists = conn.ExecuteScalar<bool>("select count(1) from Table where Id=@id", new {id});
devrait marcher...
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();
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);
}
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 });
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;