UnintentionalCodeFirstException | Effort.Ef6を使用したEntity Framework単位のテスト

c# effort entity-framework entity-framework-6 unit-testing

質問

状況

エンティティフレームワーク6に基づいて私のDbContext単体テストを有効にしたいと思います。データベースの最初のアプローチでDbContextとモデルを作成し、 .edmxデザイナファイルを作成しました。

問題

私の自動的に作成されたDbContextは、 DbContext.OnModelCreatingようにDbContext.OnModelCreatingメソッドをオーバーライドします。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

私はこの記事の情報に基づいて私のDbContextデータアクセスサービスで私のDbContext新しいインスタンスを作成しようとしています。私のコードはDatabase.SetInitializer;実行されませんDatabase.SetInitializer;このブログ記事の著者のように指摘した。私のコンストラクタは、彼とまったく同じです。私のDbContext初期化は次のようになります:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

前述のオーバーライドされたOnModelCreatingに到達すると、次の例外が発生します

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: 'データベースファーストまたはモデルファースト開発のEDMXファイルから生成されたコードで、コードファーストモードでコンテキストが使用されています。これは正しく動作しません。この問題を修正するには、この例外をスローするコード行を削除しないでください。データベースファーストまたはモデルファーストを使用する場合は、Entity Framework接続文字列が起動プロジェクトのapp.configまたはweb.configに含まれていることを確認してください。独自のDbConnectionを作成する場合は、それがEntityConnectionであり、他の種類のDbConnectionではなく、DbConnectionをとる基本DbContextコンストラクタの1つに渡すことを確認してください。コードファースト、データベースファースト、モデルの詳細については、まずEntity Frameworkのドキュメントを参照してください。http : //go.microsoft.com/fwlink/?LinkId=394715 '

stackoverflowには、データベースの最初のapporachを使用している間に、単体テストに重点を置いたたくさんの質問がありますが、誰も私のような類似の問題はないようです。

私がすでにやろうとしたこと

  • 解決策をインターネットで長時間検索しています。
  • オーバーライドされたOnModelCreating()コメントを解除します。
  • 私はすでに成功していないこのソリューションを適用しようとしました。
  • 私のDbContextMoqでモックしてDbContext 。これは絶対にオプションではありません。

質問

インメモリーデータベースを作成して使用するにはどうしたらいいですか?


追加情報

OnModelCreating()コメントを解除すると、DataContextへの最初のアクセス時に例外がスローされます。例えば:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    throw new UnintentionalCodeFirstException();
}

System.Data.Entity.ModelConfiguration.ModelValidationException: 'モデル生成中に1つ以上の検証エラーが検出されました:MyApplication.Shared.Model.KeyValuePair :: EntityType' KeyValuePair 'にキーが定義されていません。このEntityTypeのキーを定義します。 KeyValuePairs:EntityType:EntitySet 'KeyValuePairs'は、キーが定義されていないタイプ 'KeyValuePair'に基づいています。 '

受け入れられた回答

問題は、KeyValuePairデータセットのキーを指定する必要があることでした。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<KeyValuePair>().HasKey(x => x.Key);
    base.OnModelCreating(modelBuilder, null);
}

RobertJórgensgaardEngdahlありがとう!




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ