Миграция с EF 6 на EF Core: построитель выражений для оператора IncludeC#

Место общения программистов C#
Ответить
Anonymous
 Миграция с EF 6 на EF Core: построитель выражений для оператора Include

Сообщение Anonymous »

Я переношу проект .NET Framework на .NET 8, который использует Entity Framework для доступа к данным.
Используя EF 6, я передаю операторы включения в свой репозиторий в виде выражения , что-то вроде этого:

Код: Выделить всё

Expression[] getCompaniesIncludeExpressions =
{
e => e.Categories.Select(c => c.Projects.Select(d => d.Jobs.Select(f => f.Location))),
e => e.CompanyUsers
};
и прикрепите к контексту следующим образом:

Код: Выделить всё

public async Task SelectAllAsync(Expression[] includeExpressions, Expression whereExpression)
{
var entities = Context.Set().AsQueryable();

if (includeExpressions != null)
{
foreach (var includeExpression in includeExpressions)
{
entities = entities.Include(includeExpression);
}
}

if (whereExpression == null) return await entities.ToListAsync();

var list = await entities
.Where(whereExpression).ToListAsync();

return list;
}
Я получаю следующее исключение из приведенного выше в EF Core:

AggregateException: произошла одна или несколько ошибок. (Выражение 'e.Categories.AsQueryable().Select(c => c.Projects.AsQueryable().Select(d => d.Jobs.AsQueryable().Select(f => f.Location)))' недействителен внутри операции «Включить», поскольку он не представляет доступ к свойству: «t => t.MyProperty». Чтобы настроить навигацию, объявленную в производных типах, используйте приведение ('t => ((Derived)t).MyProperty. ') или оператор 'as' ('t => (t as Derived).MyProperty'). Доступ к навигации по коллекции можно фильтровать, создавая операции Where, OrderBy(Descending), thenBy(Derived), Skip или Take.

Как мне реорганизовать это, чтобы передать выражение и включить дочерние свойства с помощью thenInclude?
Спасибо заранее

Подробнее здесь: https://stackoverflow.com/questions/788 ... -statement
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»