首页 > 解决方案 > GenericRepository 模式没有错误逐行执行但抛出 ObjectContext 实例已在插入数据时以正常模式处理

问题描述

当从控制器调用以保存数据时,此代码仅在代码在调试模式下逐行执行时才能正常工作,否则数据不会保存在 DB 中,有时会在保存方法上引发异常,因为他的 ObjectContext 实例已被处置并且不能再被用于需要连接的操作。

控制器

 ...
 await Task.Run(() =>
  {
     var result = WorkUnit.CategoriesRepository.Insert(model);
  });

GenericRepsitory.cs

public async Task<int> Insert(TModel model)
    {
        var entity = Mapper.Map<TEntity>(model);
        _DbSet.Add(entity);
        return await Save();
    }
    public async Task<int> Save()
    {
        try
        {                     
             return   await _context.SaveChangesAsync();                                            
        }
        catch (DbEntityValidationException ex)
        {
            Console.Write(ex.ToString());
            return 0;
        }
        catch (Exception ex)
        {
            Console.Write(ex.ToString());
            return 0;
        }
    }

标签: entity-frameworkasp.net-web-apirepository-pattern

解决方案


从控制器中删除 Task.Run() 并调用 await 只完成了这项工作。现在工作正常。


推荐阅读