アプリで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
タイプとは何ですか?私のアプリにはありません...
同じタイプのDbSet
s`が2つあります。
IdentityDbContext<T>
自体には、次のように宣言されたUsers
プロパティが含まれます。
public DbSet<T> Users { get; set; }
クラスの2番目を宣言しています。
このファイル「ApplicationDbContext.cs」を確認し、scaffold lastによって自動的に生成された行を削除します。次のようになります。
public System.Data.Entity.DbSet<Manager.Models.ApplicationUser> IdentityUsers { get; set; }
この問題は、スキャフォールディングを使用してView
を作成することから発生する可能性があります。 View> Add> New Scaffold Item ...> MVC 5 View> [Model class:ApplicationUser]。
Scaffoldingウィザードは、ApplicationDbContext
クラスに新しいコード行を追加しました。
_public System.Data.Entity.DbSet<RecommendationPlatform.Models.ApplicationUser> IdentityUsers { get; set; }
_
これで、同じタイプの2つのDbSet
プロパティがあり、例外がFindAsync()
メソッドでスローされるだけでなく、コードファースト移行を使用しようとしたときにも発生します。
足場を使用するときは十分に注意してください。使用しないでください。