Effort(C#) - エンティティにデータをシードするときに 'シーケンスに一致する要素がありません'

c# effort entity-framework unit-testing

質問

私は私のプロジェクトでいくつかのWebサービス呼び出しのためのいくつかの単体テストを構築しようとしています。私は、プロジェクトでEntity Framework 6.1.3を使用して、コードレイヤーでデータを取得しています(コードファーストアプローチ)。私はDatabaseContextオブジェクトをモックする方法についていくつかの研究を行いましたが、私は努力がこれを行うことができることを発見しました。

私は単体テストでEffortを実装するときのドキュメントに従っていましたが、エンティティにデータをシードしようとすると、 "System.InvalidOperationException: 'シーケンスに一致する要素が含まれていません。なぜこれが起こっているのかは完全にはわかりません。どんな助けでも大歓迎です。ありがとう!

コードはどのように見えますか?

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

ここで私はエンティティにデータをシードします...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

ここに私のエンティティモデルです...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

ここに私のDatabaseContextは...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

OnModelCreatingをオーバーライドする別のクラスFakeDbContext.Baseもあります。

ここにスタックトレースがあります:

スタックトレース

受け入れられた回答

スタックトレースは、データプロバイダが「名前からストアタイプ」を探しているときに例外がスローされることを示します。これは、Effortがサポートしていないデータ型を使用していることを示しています。これは、Effortプロジェクトの問題によって確認されます。


人気のある回答

お役に立てれば。

多くの答えでは、EFステートメントにFirstorDefault()を追加する必要があると言われていますが、データアノテーションを使用する不正なプロパティでもこのエラーが発生します。

データアノテーションを使用する場合は、追加するプロパティに注意してください。

以下の例では、 TypeName = "string"nvarcharませんでした。これはデータベースのデータ型であるため、 nvarcharであったはずです。

また、 Order = n 、(0から始まる)

過去の同僚のソースコードを更新する際にこの問題が発生しました。

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

コードを修正しました

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

:)




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