Когда я создаю запрос на DBSET с слишком большим количеством CONCAT или, где положения, я получаю ошибку переполнения стека. И положения все связаны с или предложениями. Это было бы немного похоже на:
(a и b) или (c и d) или ... < /p>
Положения создаются из списка, так что количество и Положения, которые объединяются с помощью или предложения или могут быть от 0 до тысячи. Я получаю переполнение стека. Надеюсь, кто -то знает, как это должно быть сделано, не возвращаясь к написанию встроенного SQL (идет против парадигмы структуры объекта) < /p>
Точная ошибка заключается в следующем: < /p>
Stack overflow.
Repeat 798 times:
--------------------------------
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.ObjectModel.ReadOnlyCollection`1, System.Func`2, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Collections.ObjectModel.ReadOnlyCollection`1, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.VisitMethodCall(System.Linq.Expressions.MethodCallExpression)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Linq.Expressions.Expression)
--------------------------------
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit[[System.__Canon, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]](System.Collections.ObjectModel.ReadOnlyCollection`1, System.Func`2, StateType ByRef, State[] ByRef, Boolean)
at Microsoft.EntityFrameworkCore.Query.Internal.ExpressionTreeFuncletizer.Visit(System.Collections.ObjectModel.ReadOnlyCollection`1, StateType ByRef, State[] ByRef, Boolean)
< /code>
Библиотеки: < /p>
"EFCore.BulkExtensions.PostgreSql" Version="8.1.2"
"Microsoft.EntityFrameworkCore.Design" Version="9.0.0"
"Npgsql.EntityFrameworkCore.PostgreSQL" Version="9.0.2"
"Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.0"
< /code>
Вот какой -то пример кода для воспроизведения проблемы: < /p>
private class SimpleDbContext : DbContext
{
// Stores the values 0, 1, 2, ..., 100000
public virtual DbSet SequencePoints { get; set; }
}
private class SequencePoint
{
public int SequenceNumber { get; set; }
}
private void ConcatErrorTest()
{
SimpleDbContext simpleDbContext = new();
List selectRanges = new(); // 0, 10, 11, 20, 21, 21, etc...
for (int i = 0; i < 7500; i++)
{
int startRange = i * 10;
int endRange = startRange + (i % 5);
selectRanges.Add(new Tuple(startRange, endRange));
}
IQueryable queryable = null;
foreach (Tuple selectRange in selectRanges)
{
IQueryable whereQueryable = simpleDbContext.SequencePoints.AsQueryable().Where(point =>
(point.SequenceNumber >= selectRange.Item1) &&
(point.SequenceNumber sequenceNumber.SequenceNumber).ToList();
_logger.LogInformation("result = {result}", result);
}
Подробнее здесь: https://stackoverflow.com/questions/794 ... any-concat
C# Entity Framework бросает переполнение стека с помощью слишком большого количества CONCAT ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение