MVC异步存储库模式不会返回到控制器

本文关键字:返回 控制器 模式 异步 存储 MVC | 更新日期: 2023-09-27 17:50:05

我是MVC的新手,我试图使用存储库服务模式创建一个应用程序,我尽了最大努力遵循一些教程,但现在我不知道我的实现中有什么问题或什么是错误的,因为我觉得有什么问题,虽然在构建时没有任何错误。

我的控制器

  public async Task<JsonResult> Create(string LocationName)
    {
        Location location = new Location
        {
            LocationName = LocationName
        };
        await _LocationService.InsertAsync(location);
        var result = await _LocationService.GetAllAsync();
        return Json(result, JsonRequestBehavior.AllowGet);
    }

该控制器从ajax post接收字符串,字符串被正确传递给实体Location {LocationName = LocationName}。在创建Location的新对象之后,它被传递给LocationService:

LocationService

public class LocationService : ILocationService
{
    private ILocationRepository _LocationRepository;
    public LocationService(ILocationRepository locationRepository)
    {
        _LocationRepository = locationRepository;
    }
    public async Task InsertAsync(Location entity)
    {
        await _LocationRepository.InsertAsync(entity);
    }
    //other async operations below

}

对象Location到达我的LocationService然后再次传递给LocationRepository:

LocationRepository

public class LocationRepository : ILocationRepository
    {
        private DefaultConnection dbContext;
        private DbSet<Location> DbSet;
        public LocationRepository()
        {
            dbContext = new DefaultConnection();
            DbSet = dbContext.Set<Location>();
        }

        public async Task InsertAsync(Location entity)
        {
            DbSet.Add(entity);
            await dbContext.SaveChangesAsync();
        }
        #region IDisposable
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
        protected virtual void Dispose(bool disposing)
        {
            if (disposing)
            {
                if (dbContext != null)
                {
                    dbContext.Dispose();
                }
            }
        }
        #endregion
    }

对象Location被插入,但在SaveAsync之后,它不会回到我的控制器执行其余的操作。

注意:位置对象保存在数据库中,但我需要它去返回所有位置的JsonResult。

  1. 为什么它不回到我的控制器后SaveAsync。
  2. 有什么可以改进的/我的实现有什么问题,所以我可以做得更好。

任何帮助都将非常感激。

谢谢!

MVC异步存储库模式不会返回到控制器

您是否尝试在dbContext.SaveChangesAsync()_LocationRepository.InsertAsync(entity)上同时呼叫ConfigureAwait(false) ?

这个死锁有可能是由于库上的异步方法无法在ASP上运行而引起的。净上下文。ConfigureAway(false)应该使每个调用在它自己的上下文中运行。

Stephen的博客上有一个关于异步上下文的很好的解释。点击这里了解更多。