简体   繁体   English

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());
}

After this I get N times the same results, but all ids are different. 在此之后,我得到了N次相同的结果,但是所有id都不相同。

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());
 }
}

Solution below more usefull, just need use AsNoTracking() : 下面的解决方案更有用,只需使用AsNoTracking()即可

getAutoResults.Add(await localContext.KaratGetAutoDataResults .FromSql($"dbo.Karat_getAutoData @MeasurementId=elem.MeasurementId},@CalcRequestId={null}") .AsNoTracking()
.ToListAsync());

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM