Используя 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 (), но это не отсортировало его.
Документация по этому вопросу очень проста, поэтому я Не знаю, что я пропустил.