Я использую Entity Framework Core 2.1.2 с отложенной загрузкой и выполняю запрос.Если я пытаюсь передать лямбда-выражение, я всегда получаю следующее исключение:
System.InvalidOperationException: ошибка, сгенерированная для предупреждения 'Microsoft.EntityFrameworkCore.Infrastructure.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)
Извините за плохое форматирование.Но я надеюсь, что вы понимаете мою проблему.