ASP.NET 核心存储过程不在循环中工作
ASP.NET Core stored procedure not working in loop
我想使用存储过程进行数据库查询,它适用于单个查询,但在循环中,它的执行方式与第一个循环迭代相同。
var getAutoResults = new List<List<Karat_getAutoData_Result>>();
foreach (var elem in meas)
{
getAutoResults.Add(await _context.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId = {elem.MeasurementId}, @CalcRequestId = {null}")
.ToListAsync());
}
在这之后我得到了 N 次相同的结果,但是所有的 id 都不一样。
我只能这样解决了。我只是在每个循环中创建新的上下文实例。我认为这是个坏主意,但它确实有效。
var getAutoResults = new List<List<Karat_getAutoData_Result>>();
var optionsBuilder = new DbContextOptionsBuilder<TestRecipesDBContext>();
optionsBuilder.UseSqlServer("MY CONNECTION STRING");
foreach (var elem in meas)
{
using (var localContext = new TestRecipesDBContext(optionsBuilder.Options))
{
getAutoResults.Add(await localContext.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId={elem.MeasurementId},@CalcRequestId={null}")
.ToListAsync());
}
}
下面的解决方案更有用,只需要使用 AsNoTracking():
getAutoResults.Add(等待localContext.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId=elem.MeasurementId},@CalcRequestId={null}")
.AsNoTracking()<br>
.ToListAsync());
我想使用存储过程进行数据库查询,它适用于单个查询,但在循环中,它的执行方式与第一个循环迭代相同。
var getAutoResults = new List<List<Karat_getAutoData_Result>>();
foreach (var elem in meas)
{
getAutoResults.Add(await _context.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId = {elem.MeasurementId}, @CalcRequestId = {null}")
.ToListAsync());
}
在这之后我得到了 N 次相同的结果,但是所有的 id 都不一样。
我只能这样解决了。我只是在每个循环中创建新的上下文实例。我认为这是个坏主意,但它确实有效。
var getAutoResults = new List<List<Karat_getAutoData_Result>>();
var optionsBuilder = new DbContextOptionsBuilder<TestRecipesDBContext>();
optionsBuilder.UseSqlServer("MY CONNECTION STRING");
foreach (var elem in meas)
{
using (var localContext = new TestRecipesDBContext(optionsBuilder.Options))
{
getAutoResults.Add(await localContext.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId={elem.MeasurementId},@CalcRequestId={null}")
.ToListAsync());
}
}
下面的解决方案更有用,只需要使用 AsNoTracking():
getAutoResults.Add(等待localContext.KaratGetAutoDataResults
.FromSql($"dbo.Karat_getAutoData @MeasurementId=elem.MeasurementId},@CalcRequestId={null}")
.AsNoTracking()<br>
.ToListAsync());