与 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
双胞胎了。
我正在尝试使用 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
双胞胎了。