2020-01-07 更新

UseInMemoryDatabaseを使う際の注意点

ASP.NET coreでユーザー認証の動作確認にDBを用意するのが面倒だったので、公式のドキュメントでも紹介されている「UseInMemoryDatabase」を使ってみたのですが、ドキュメントそのままにコードを書き換えると問題があったので、その時のメモです。

目次

  • 問題のあったコード
  • 対応後
  • 参考リンク

問題のあったコード

公式のドキュメントで、データベースなしでテストする場合、Startup.csで定義されているDBの指定を以下のように「UseInMemoryDatabase」に置き換えて実行可能と紹介されています。


services.AddDbContext<ApplicationDbContext>(options =>
    options.UseInMemoryDatabase(Guid.NewGuid().ToString()));

何も考えずに上記のコードに置き換えたのですが、それだと1つ1つのリクエストは正常に動作するのに、ユーザー登録後、登録したユーザーでログインしようとしても、そんなユーザーは存在しないというエラーが出て動作しませんでした。

調べると、リクエストの度に上記のコードが呼び出され、その度に「Guid.NewGuid().ToString()」で新しいデータベース名を作成していたため、前回登録したはずのユーザー情報にアクセスできなくなっていたようです。

対応後

対応後のコードは以下の通り。


services.AddDbContext<ApplicationDbContext>(options =>
    options.UseInMemoryDatabase("SampleApp"));

DB名(SampleApp)はなんでもいいです。

最近、ASP.NET Coreをメインに学習していますが、便利と思える機能が沢山ある反面、新しく覚えないといけないことや問題があった場合の原因調査や対応に時間がかかるので、少しばかりフラストレーションが溜まりますね。仕方がないことですが、もうちょっとなんとかならないかと思ってしまいます。

参考リンク

ASP.NET Core】関連記事