Asp.net 如何在多个存储过程调用中异步使用Dapper?
我正在ASP.NETCore2.1CRUD应用程序中使用简洁的ORM,并带有SQLServer数据库。对于我正在开发的新表单,我希望在调用屏幕时一次性检索所有参考数据(以填充Asp.net 如何在多个存储过程调用中异步使用Dapper?,asp.net,asynchronous,stored-procedures,dapper,Asp.net,Asynchronous,Stored Procedures,Dapper,我正在ASP.NETCore2.1CRUD应用程序中使用简洁的ORM,并带有SQLServer数据库。对于我正在开发的新表单,我希望在调用屏幕时一次性检索所有参考数据(以填充SELECTfieldoptions)。这涉及到一系列存储过程调用,我希望异步执行这些调用以获得最佳性能 建议我应该考虑使用QueryMultipleAsync,但我找不到它与存储过程一起使用的示例,只有硬编码的SQL语句 我的C#代码目前如下所示: public async Task<ContactReference
SELECT
fieldoptions)。这涉及到一系列存储过程调用,我希望异步执行这些调用以获得最佳性能
建议我应该考虑使用QueryMultipleAsync
,但我找不到它与存储过程一起使用的示例,只有硬编码的SQL语句
我的C#代码目前如下所示:
public async Task<ContactReferenceData> Get()
{
ContactReferenceData refData = new ContactReferenceData();
try
{
using (IDbConnection dbConnection = _connection)
{
dbConnection.Open();
var countryData = await dbConnection.QueryAsync<Country>(sql: "usp_GetCountries", commandType: CommandType.StoredProcedure);
refData.CountryDetails = countryData.AsList();
var companyData = await dbConnection.QueryAsync<Company>(sql: "usp_GetCompanies", commandType: CommandType.StoredProcedure);
refData.CompanyDetails = companyData.AsList();
var groupData = await dbConnection.QueryAsync<Group>(sql: "usp_GetGroups", commandType: CommandType.StoredProcedure);
refData.GroupDetails = groupData.AsList();
var groupPositionData = await dbConnection.QueryAsync<GroupPosition>(sql: "usp_GetGroupPositions", commandType: CommandType.StoredProcedure);
refData.GroupPositionDetails = groupPositionData.AsList();
}
return refData;
}
catch (Exception ex)
{
_logger.LogError(ex.ToString());
throw;
}
}
公共异步任务Get()
{
ContactReferenceData refData=新的ContactReferenceData();
尝试
{
使用(IDbConnection dbConnection=\u连接)
{
dbConnection.Open();
var countryData=await dbConnection.querySync(sql:“usp_GetCountries”,commandType:commandType.storedProcess);
refData.CountryDetails=countryData.AsList();
var companyData=await dbConnection.QueryAsync(sql:“usp_getcompanys”,commandType:commandType.storedProcess);
refData.CompanyDetails=companyData.AsList();
var groupData=await dbConnection.QueryAsync(sql:“usp_GetGroups”,commandType:commandType.storedProcess);
refData.GroupDetails=groupData.AsList();
var groupPositionData=await dbConnection.QueryAsync(sql:“usp_GetGroupPositions”,commandType:commandType.storedProcess);
refData.GroupPositionDetails=groupPositionData.AsList();
}
返回参考数据;
}
捕获(例外情况除外)
{
_logger.LogError(例如ToString());
投掷;
}
}
这在我的测试环境中工作正常,但我不确定这是执行异步查询的正确方法。我特别关注以下问题:
QueryMultipleAsync
来正确地实现这一点你试过这样的东西吗
public async Task<ContactReferenceData> Get()
{
var sql = "EXEC usp_GetCountries; EXEC usp_GetCompanies; EXEC usp_GetGroups; EXEC usp_GetGroupPositions";
ContactReferenceData refData = new ContactReferenceData();
try
{
using (IDbConnection dbConnection = _connection)
{
using (var multi = connection.QueryMultipleAsync(sql: sql, commandType: CommandType.StoredProcedure ).Result)
{
refData.CountryDetails = multi.Read<countryDetails>().ToList();
refData.CompanyDetails = multi.Read<CompanyDetails>().ToList();
refData.GroupData = multi.Read<Groups>().ToList();
refData.GroupPositionsData= multi.Read<GroupPositions>().ToList();
}
}
return refData;
}
catch (Exception ex)
{
_logger.LogError(ex.ToString());
throw;
}
}
公共异步任务Get()
{
var sql=“EXEC usp\u GetCountries;EXEC usp\u getcompanys;EXEC usp\u GetGroups;EXEC usp\u GetGroupPositions”;
ContactReferenceData refData=新的ContactReferenceData();
尝试
{
使用(IDbConnection dbConnection=\u连接)
{
使用(var multi=connection.querymultiplesync(sql:sql,commandType:commandType.StoredProcedure).Result)
{
refData.CountryDetails=multi.Read().ToList();
refData.CompanyDetails=multi.Read().ToList();
refData.GroupData=multi.Read().ToList();
refData.GroupPositionsData=multi.Read().ToList();
}
}
返回参考数据;
}
捕获(例外情况除外)
{
_logger.LogError(例如ToString());
投掷;
}
}
您尝试过类似的方法吗?谢谢您的建议。我确实试过了,但它出错了,因为它没有在“Read”中识别“countryDetails”,可能是因为这是一个C#构造,而它在那里需要一个SQL实体,比如一个tablename。我可以考虑修复它,但我觉得我会失去C代码和存储过程之间的逻辑分离。