在不同终结点使用UnitOfWork设计,尝试应用savechanges时无法跟踪实体更新,#.net(UnitOfWork设计)

inn6fuwd  于 2023-01-14  发布在  .NET
关注(0)|答案(1)|浏览(156)

如果我使用两个服务的方法在相同的行动,如下面它是工作.

[HttpPost, Route("save_changes")]
    public async Task<IActionResult> SaveChangesAsync()
    {
        _logService.CreateLog(logCreateModel);
        await _unitOfWork.SaveChangesAsync();
        return Ok();
    }

但是我需要在不同的动作调用实体更新和SaveChanges方法,因为我想从不同的API发送请求。

[HttpPost, Route("create")]
    public async Task CreateLog(LogCreateModel logCreateModel)
    {
        await _logService.CreateLog(logCreateModel);
    }

 [HttpPost, Route("save_changes")]
    public async Task<IActionResult> SaveChangesAsync()
    {
        unitOfWork.SaveChangesAsync();
        return Ok();
    }

这是我的UnitOfWork类**

public class UnitOfWork : IUnitOfWork
{
    private readonly PrimeLogDatabaseContext _context;
       
    private IRepository<Log> _log;
    private IRepository<LifeCycle> _lifeCycle;

    public UnitOfWork(PrimeLogDatabaseContext context)
    {
        _context = context;
    }
  
    public IRepository<Log> log => _log ?? new LogRepository(_context);
    public IRepository<LifeCycle> lifeCycle => _lifeCycle ?? new LifeCycleRepository(_context);

    public async Task SaveChangesAsync()
    {
     await _context.SaveChangesAsync();
    }

    public void SaveChanges()
    {
        _context.SaveChanges();
    }
}

我怎么能?
P. S:我想创建多个日志,并在请求结束时,我想提交所有日志到数据库。我使用UnitOfWork设计,因为我必须从创建过程中分离SaveChanges方法。在另一个API中,我有包括CreateLog请求服务的操作。我使用操作结果时触发的属性向SaveChanges发送请求。

tp5buhyn

tp5buhyn1#

几个月后;我用另一种设计模式解决了这个问题。我在一个API上使用UnitOfWork结构(作为中间件工作),并使用责任链模式。

相关问题