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

时间:2017-12-04 13:23:29

标签: dapper

我正在尝试使用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();
}

1 个答案:

答案 0 :(得分:2)

唯一真正的问题我可以看到有不必要的string.Format

我个人可能只想更新现有对象中的Id(或其他),但您的OUTPUT INSERTED.*也能正常工作。我可能非常想通过var output = ...内联移动本地声明,当然,一旦我完成 它就会让整个事情变得很诱人内联:

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双胞胎。