与 CUD 操作一起使用时滥用 Query 或 QueryAsync

Abusing Query or QueryAsync when used with CUD operations

我正在尝试使用 Dapper 作为 ORM 实现存储库,我希望返回插入或更新的实体。这是我想出的,它工作得很好,但我想知道这是否滥用了默认的 Query 和 QueryAsync 方法?

public async Task<Models.TestTable> Insert(Models.TestTable inputObject)
{
    IEnumerable<Models.TestTable> output;

    output = await _connection.QueryAsync<Models.TestTable>(
        sql: string.Format("INSERT INTO TestTable (FirstName, LastName) OUTPUT INSERTED.* VALUES (@FirstName, @LastName)"),
        param: inputObject);

    return output.SingleOrDefault();
}

我能看到的唯一实际的问题是不必要的string.Format

就我个人而言,我 可能 试图更新现有对象中的 Id(或其他),但您的 OUTPUT INSERTED.* 也可以正常工作。我 可能 很想通过 var output = ... 内联移动本地声明,当然一旦我完成 that 它就可以了试图使整个事情内联:

public async Task<Models.TestTable> Insert(Models.TestTable inputObject)
    => (await _connection.QueryAsync<Models.TestTable>(
    "INSERT INTO TestTable (FirstName, LastName) OUTPUT INSERTED.* VALUES (@FirstName, @LastName)",
    inputObject)).SingleOrDefault();

但其中大部分是琐事和主观的。哎呀,即使是 string.Format 也只是 不必要的 而不是 有问题的

还有一件事要检查:我们(我不记得了!)是否添加了 QuerySingleOrDefaultAsync 方法?我知道我们添加了 QuerySingleOrDefault - 我只是不记得 *Async 双胞胎了。