EF Core Lazy-Loading - Свойства навигации не работают с сообщением «Тип или имя пространства имен 'ProductProxy' не существует в пространстве имен 'Castle.Proxies'» - PullRequest
0 голосов
/ 13 июля 2020

Используя EF Core 2.2.3, я настроил отложенную загрузку в соответствии с документами https://docs.microsoft.com/en-us/ef/core/querying/related-data#lazy -loading

Startup:

public void ConfigureServices(IServiceCollection services)
{
    // snipped other stuff

    services.AddScoped<IProductRepository, ProductRepository>();

    services.AddDbContext<ProductsDbContext>(options => {
        options.UseLazyLoadingProxies().UseSqlServer(Configuration.GetConnectionString("ProductsConnection"));
    });
}

Пример entity:

public class Product: IEntity
{
    public Guid Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<ProductIndustry> ProductIndustries { get; set; }
}

Метод репозитория продукта:

public ServiceResponse<TEntity> GetByIdAsync(Guid id)
{
    try
    {
        var entity = DbContext.Set<TEntity>()
            .AsNoTracking()
            .FirstOrDefault(e => e.Id == id);

        return ServiceResponseFactory.SuccessfulResponse(entity);
    }
    catch (Exception ex)
    {
        LogService.LogException(ex);
        return ServiceResponseFactory.FailedResponse<TEntity>();
    }
}

Если я проверяю объект во время отладки, мои свойства навигации показывают следующую ошибку:

((Castle.Proxies.ProductProxy)productResponse.Content).ProductIndustries' threw an exception of type 'System.InvalidOperationException

Если я щелкну значок перезагрузки рядом со свойством, ошибка изменится на:

error CS0234: The type or namespace name 'ProductProxy' does not exist in the namespace 'Castle.Proxies' (are you missing an assembly reference?)

Я модифицирую отложенную загрузку в существующий проект, и я удалил весь асинхронный c код на уровне БД, и я попытался удалить .AsNoTracking (), но это не отсортировало его.

Документация по этому вопросу очень проста, поэтому я Не знаю, что я пропустил.

...