Получение «попытки выполнить отложенную загрузку свойства навигации на отдельном объекте» после попытки передать выражение alambda в предложение Where - PullRequest
1 голос
/ 27 марта 2019

Я использую 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) 

Извините за плохое форматирование.Но я надеюсь, что вы понимаете мою проблему.

...