使用Dapper ORM检查记录是否存在

web*_*orm 15 dapper

使用Dapper ORM检查记录是否存在的最简单方法是什么?

我是否真的需要为查询定义POCO对象,我只想检查记录是否存在?

Mar*_*ell 39

int id = ...
var exists = conn.ExecuteScalar<bool>("select count(1) from Table where Id=@id", new {id});
Run Code Online (Sandbox Code Playgroud)

应该管用...

  • 只需使用 `COUNT(DISTINCT 1)` 来确保你得到 1 (true) 的答案,即使你有多个具有相同 id/key 的记录。诚然,这应该是一个边缘情况。 (6认同)
  • @webworm请注意,如果你的密钥超过1条记录会变得棘手,但是......你不应该这样:) (2认同)

Kev*_*nck 7

我认为这可能会减少一些开销,因为没有函数调用或数据类型转换:

int id = ...
var exists = connection.Query<object>(
    "SELECT 1 WHERE EXISTS (SELECT 1 FROM MyTable WHERE ID = @id)", new { id })
    .Any();
Run Code Online (Sandbox Code Playgroud)


Jan*_*kis 7

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 });
Run Code Online (Sandbox Code Playgroud)