#ef-core-2.1
#ef-core-2.1
Вопрос:
Я использую Entity Framework Core 2.1.2 с включенной отложенной загрузкой и выполняю запрос. Если я пытаюсь передать лямбда-выражение, я всегда получаю следующее исключение:
.Исключение InvalidOperationException: ошибка, сгенерированная для предупреждения «Microsoft.EntityFrameworkCore.Инфраструктура.DetachedLazyLoadingWarning: Была предпринята попытка отложенной загрузки свойства навигации ‘Children’ для отдельного объекта типа ‘ParentProxy’. Отложенная загрузка не поддерживается для отдельных объектов или объектов, которые загружаются с помощью ‘AsNoTracking()’.’
Вот некоторый код :
public class User
{
public virtual ICollection<UserRole> UserRoles { get; set; } = new HashSet<UserRole>();
}
public class UserRole
{
public int UserId { get; set; }
public int RoleId { get; set; }
public virtual User User { get; set; }
}
Контекст моей базы данных:
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddDbContext<Context>(options =>
{
options.UseLazyLoadingProxies();
options.UseSqlServer(Configuration.GetConnectionString("connection"));
});
}
Вот как это работает:
_userRepository.Table.Where(user => user.UserRoles.Any(userRole => userRole.RoleId == 10)).ToList()
И вот почему это не:
_userRepository.Table.Where(user => condition(user)).ToList()
Где условие:
Func<User, bool> condition
Пример:
Func<User, bool> result = (user) => user.UserRoles.Any(role => role.RoleId == 10)
Прошу прощения за неправильное форматирование. Но я надеюсь, что вы понимаете мою проблему.
Комментарии:
1. Проблема в
Func<…>
. Запросы EF лучше всего работают сExpression<Func<…>>
.2. @IvanStoev Спасибо. Я думал, что это не работает, но это работает!