我有一个带有端点“DeleteFolder”的 WebAPI 解决方案。看起来像这样:
public FolderController()
{
_service = new DtoService();
}
[HttpDelete]
public HttpResponseMessage DeleteFolder(int id)
{
_service.DeleteFolder(id);
return Request.CreateResponse(HttpStatusCode.OK, "Deleted");
}
我的 _service 是 DtoService.cs 的一个实例,其中包含:
public DtoService()
{
_repository = new RepositoryService();
}
public void DeleteFolder(int folderId)
{
_repository.DeleteFolder(folderId);
}
最后,在我的存储库中,我有这个:
public RepositoryService()
{
_db = new AppDbContext();
}
public void DeleteFolder(int folderId)
{
var folder = GetFolder(folderId);
_db.Folders.Remove(folder);
SaveChanges();
}
其中 _db 是我项目的 DbContext 的一个实例,在 Repository 类的构造函数中定义一次。
当我向 delete 方法发送一堆异步 AJAX 调用时,我得到“在创建模型时无法使用上下文。”。我可以看到每个 RepositoryService 的新实例都在旋转,但是如果我在
var 文件夹 = GetFolder(folderId);
然后跨步,它再次被击中,所以似乎另一个实例试图在第一个完成之前击中相同的代码,这在某种程度上导致了这个错误被抛出。
我的 WebAPI 层或 DTO 服务层中没有任何对我dbContext
的引用 - 如果可能的话,我更愿意保持这种方式。我尝试将 DeleteFolder 代码包装在 a 中using (_db = new AppDbContext)
,但这也不起作用——而且我觉得用新的 dbcontext 填充我的所有存储库方法不可能是推荐的解决方案。
这里发生了什么?任何提示都会很棒,我在这里完全不知所措。