0

エンドポイント「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 クラスのコンストラクターで一度定義されます。

一連の非同期 AJAX 呼び出しを delete メソッドに送信すると、「モデルの作成中はコンテキストを使用できません。」というメッセージが表示されます。それぞれに対して RepositoryService の新しいインスタンスがスピンアップしているのを確認できますが、ブレークポイントを

var フォルダー = GetFolder(folderId);

ステップオーバーすると、再びヒットするため、最初のインスタンスが完了する前に他のインスタンスが同じコードをヒットしようとしているようで、何らかの理由でこのエラーがスローされます。

WebAPI レイヤーまたは DTO サービス レイヤーで自分への参照はありませんdbContext。可能であれば、そのままにしておくことをお勧めします。DeleteFolder コードを でラップしようとしましたusing (_db = new AppDbContext)が、これもうまくいきませんでした。すべてのリポジトリ メソッドに新しい dbcontext を追加することは、おそらく推奨される解決策ではありません。

何が起きてる?どんなヒントでも素晴らしいでしょう、私はここで完全に途方に暮れています。

4

1 に答える 1