ASP.NET Core存储过程无法循环工作 [英] ASP.NET Core stored procedure not working in loop

查看:52
本文介绍了ASP.NET Core存储过程无法循环工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想对数据库查询使用存储过程,它适用于单个查询,但是在循环中,它的执行类似于第一次循环迭代.

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆