【发布时间】:2020-10-21 03:53:04
【问题描述】:
我收到以下错误。目前遵循 Async/await 模式并使用 IServiceScopeFactory。尝试将 Repo 与 IQueryable 链接。
接收错误如下:
无法访问已处置的对象。此错误的一个常见原因是释放从依赖注入中解析的上下文,然后尝试在应用程序的其他地方使用相同的上下文实例。如果您在上下文上调用 Dispose() 或将上下文包装在 using 语句中,则可能会发生这种情况。如果你使用依赖注入,你应该让依赖注入容器负责处理上下文实例。 对象名称:'PropertyContext'。
存储库:
public class AddressRepository
{
private readonly IServiceScopeFactory _factory;
public AddressRepository(IServiceScopeFactory factory) : base(factory)
{
_factory = factory;
[EnableQuery]
public IQueryable<LkAddressType> GetAddressTypes()
{
using (var scope = _factory.CreateScope())
{
var db = scope.ServiceProvider.GetService<PropertyContext>();
return db.LkAddressType.AsNoTracking();
}
}
应用服务:
public async Task<AddressTypeResponse> GetAddressTypes()
{
var data = await (_addressRepository.GetAddressTypes()).ToListAsync();
var mapped = _mapper.Map<ICollection<AddressTypeModel>>(data);
var dto = _mapper.Map<ICollection<AddressTypeDto>>(mapped);
return new AddressTypeResponse {Body = dto};
}
控制器:
[HttpGet("AddressType")]
public async Task<ActionResult<AddressTypeResponse>> GetAddressTypes()
{
return Ok(await _service.GetAddressTypes());
}
目前使用 Net Core 2.2、Entity Framework Core 和 OData。
【问题讨论】:
标签: c# .net entity-framework asp.net-core .net-core