ASP.NET Core存储过程无法循环工作 [英] ASP.NET Core stored procedure not working in loop
问题描述
我想对数据库查询使用存储过程,它适用于单个查询,但是在循环中,它的执行类似于第一次循环迭代.
I want to use a stored procedure for DB query, it works for a single query, but in loop, it executes like in first loop iteration.
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都不相同.
After this I get N times the same results, but all ids are different.
推荐答案
我只能这样解决.我只是在每个循环中创建新的上下文实例.我认为这是个坏主意,但是可以.
I can resolve it only like this. I'm just creating new context instance in each loop. I think this is bad idea, but it works.
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():
Solution below more usefull, just need use AsNoTracking():
getAutoResults.Add(等待localContext.KaratGetAutoDataResults.FromSql($"dbo.Karat_getAutoData @ MeasurementId = elem.MeasurementId},@ CalcRequestId = {null}").AsNoTracking()
.ToListAsync());
这篇关于ASP.NET Core存储过程无法循环工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!