web-dev-qa-db-ja.com

ASP.NET Identity-タイプごとの複数のオブジェクトセットはサポートされていません

アプリでASP.NET Identityを使用するとエラーが発生しました。

タイプごとの複数のオブジェクトセットはサポートされていません。オブジェクトセット「Identity Users」と「Users」の両方に「Recommendation Platform.Models.ApplicationUser」タイプのインスタンスを含めることができます。

StackOverflowでこのエラーに関するいくつかの質問を見ました。すべては、同じタイプの2つのDbSetオブジェクトを示します。しかし、私のDbContextには、同じタイプのDbSetsがありません。ログイン中にFindAsync()メソッドで例外がスローされます。

if (ModelState.IsValid)
    var user = await UserManager.FindAsync(model.UserName, model.Password);
    if (user != null && user.IsConfirmed)
    {

問題は、同じタイプのDbSetsが2つないことです。私のコンテキストは次のようになります。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }

    public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }

}

そして

public class RecContext : DbContext
{
    public RecContext()
        : base("RecConnection")
    {
        Database.SetInitializer<RecContext>(new DropCreateDatabaseIfModelChanges<RecContext>());
    }

    public DbSet<Recommendation> Recommendations { get; set; }
    public DbSet<Geolocation> Geolocations { get; set; }
    public DbSet<Faq> Faqs { get; set; }
    public DbSet<IndexText> IndexTexts { get; set; }
}

この問題の原因は何ですか?組み込みのASP.NET Identity機能に関連するものがありますか?とにかく、Usersタイプとは何ですか?私のアプリにはありません...

49
magos

同じタイプのDbSets`が2つあります。

IdentityDbContext<T>自体には、次のように宣言されたUsersプロパティが含まれます。

public DbSet<T> Users { get; set; }

クラスの2番目を宣言しています。

99
MarcinJuraszek

このファイル「ApplicationDbContext.cs」を確認し、scaffold lastによって自動的に生成された行を削除します。次のようになります。

public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; }
69
Héctor Fuentes

この問題は、スキャフォールディングを使用してViewを作成することから発生する可能性があります。 View> Add> New Scaffold Item ...> MVC 5 View> [Model class:ApplicationUser]

Add View Screenshot

Scaffoldingウィザードは、ApplicationDbContextクラスに新しいコード行を追加しました。

_public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }
_

これで、同じタイプの2つのDbSetプロパティがあり、例外がFindAsync()メソッドでスローされるだけでなく、コードファースト移行を使用しようとしたときにも発生します。

Exception when using code-first migrations

足場を使用するときは十分に注意してください。使用しないでください。

5
Boško Bezik