Хранимая процедура ASP.NET Core не работает в цикле - PullRequest
0 голосов
/ 06 июля 2018

Я хочу использовать хранимую процедуру для запроса к БД, она работает для одного запроса, но в цикле она выполняется как в итерации первого цикла.

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 раз одинаковые результаты, но все идентификаторы разные.

1 Ответ

0 голосов
/ 06 июля 2018

Я могу решить это только так. Я просто создаю новый экземпляр контекста в каждом цикле. Я думаю, что это плохая идея, но она работает.

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(await localContext.KaratGetAutoDataResults .FromSql($"dbo.Karat_getAutoData @MeasurementId=elem.MeasurementId},@CalcRequestId={null}") .AsNoTracking()<br> .ToListAsync());

...