我正在尝试使用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();
}
答案 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
双胞胎。