我有一個端點「DeleteFolder」的WebAPI解決方案。這看起來是這樣的:EF中my dbcontext的兩個不同實例與「在創建模型時無法使用上下文」相沖突。
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 folder = GetFolder(folderId);
然後再一次,它再次被擊中,所以看起來另一個實例試圖在第一個完成之前命中相同的代碼,這在某種程度上導致了這個錯誤被拋出。
我的WebAPI圖層或DTO服務圖層中沒有任何對我的dbContext
的引用 - 如果可能,我寧願保留它。我嘗試在using (_db = new AppDbContext)
中包裝DeleteFolder代碼,但是這也不起作用 - 而且我覺得要用全新的dbcontext胡說所有的存儲庫方法不可能是推薦的解決方案。
這是怎麼回事嗎?任何提示都會很棒,我完全不知所措。