无法在扩展Hub的类中访问DbContext

问题描述

我正在尝试访问SignalR集线器中的DbContext,但它始终抛出此异常:

{“值不能为空。(参数'unitOfWork')”}

我不知道这是什么问题。这是我的代码

public class MyHub : Hub
{
    private readonly IRepository<MyTable,long> _repository;

    public MyHub (IRepository<MyTable,long> repository)
    {
        _repository = repository;
    }

    public async Task Get(TestDto testDto)
    {
        try
        {
            var myData = await _repository.GetDbContext().Set<MyTable>()
                .Include(x => x.obj1)
                .ThenInclude(x => x.list1)
                .ThenInclude(x => x.obj2)
                .ToListAsync();

            await Clients.All.SendAsync("Get",myData);
        }
        catch (Exception ex)
        {
            throw new UserFriendlyException(ex.InnerException.Message.ToString());
        }
    }
}

注意:我正在使用ASP.NET Boilerplate框架(.NET Core 3.1和Angular)

解决方法

添加[UnitOfWork]属性并将其设置为virtual方法:

[UnitOfWork]
public virtual async Task Get(TestDto testDto)
{
    // ...
}

或者您可以注入IUnitOfWorkManager来显式地开始UnitOfWork

public async Task Get(TestDto testDto)
{
    using (var uow = UnitOfWorkManager.Begin())
    {
        try
        {
            var myData = await _repository.GetDbContext().Set<MyTable>()
                .Include(x => x.obj1)
                .ThenInclude(x => x.list1)
                .ThenInclude(x => x.obj2)
                .ToListAsync();

            await Clients.All.SendAsync("Get",myData);
        }
        catch (Exception ex)
        {
            throw new UserFriendlyException(ex.InnerException.Message.ToString());
        }
    }
}