8
Castle.Proxies.IdentityUserLogin: : EntityType 'IdentityUserLogin' has no key defined. Define the key for this EntityType.  

EntityFramework バージョン 6.1、AspNet.Identity.Core バージョン 2.0、AspNet.Identity.EntityFramework バージョン 2.0 を使用する MVC 5.1 プロジェクトのテストをセットアップしようとしています。私の唯一のテストケースは非常に単純で、実行しようとするとすぐに「IdentityUserLogin」およびエンティティタイプ「IdentityUserRole」に対して上記のエラーが発生します。問題は、私が理解している限り、これらのエンティティの両方にキーが定義されていることです! それらはフレームワークによって提供されるため。コードの最初の部分でそれらの説明を明示的に見ることはできませんが、データベースでは両方にキーがあることがわかります。

私のテスト プロジェクトでは、Microsoft.VisualStudio.TestTools.UnitTesting と Moq (および EF & Identity Core ライブラリ) を使用しています。

ヘルプやリソースを指しているだけでも大歓迎です。同様のエラーが発生した人は見つかりませんでした。

4

2 に答える 2

18

私は同じ問題を抱えていましたが、次のようにモックを作成することで、最終的にテストを実行できました。

var mockContext = new Mock<MyDbContext>() { CallBase = true };

私が理解しているように、それ以外の場合、モックは基本クラスの実装を呼び出しません。そして、これらのキーは、おそらく OnModelCreating の基本クラスの実装で定義されるでしょう。

于 2014-04-14T11:30:07.727 に答える
0

Entity Framework では、エンティティには主キーとして定義されたプロパティ (データベース列) が必要ですが、データベースにプロパティがないように見えます (または EF が適切にマップしていません)。

キーを手動で定義するには、次のKey属性を使用できます。

class IdentityUserLogin 
{
    [Key]
    public int IdentityUserLoginId { get; set; }
}
于 2014-04-07T10:36:59.637 に答える