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。
- 为什么它不回到我的控制器后SaveAsync。
- 有什么可以改进的/我的实现有什么问题,所以我可以做得更好。
任何帮助都将非常感激。
谢谢!
您是否尝试在dbContext.SaveChangesAsync()
和_LocationRepository.InsertAsync(entity)
上同时呼叫ConfigureAwait(false)
?
这个死锁有可能是由于库上的异步方法无法在ASP上运行而引起的。净上下文。ConfigureAway(false)
应该使每个调用在它自己的上下文中运行。
Stephen的博客上有一个关于异步上下文的很好的解释。点击这里了解更多。