私はあなたが提案したアプローチに従いましたが、それは私にとってはうまくいきました。ただし、主に構文と命名の問題がいくつかあり、たまたま異なっていました。これらの違いは、おそらく使用した Visual Studio のバージョンが異なるためだと思います (.NET ではなく、私のバージョンは .NET 4.5.1 のリリース 1 です)。私は、私の特定のソリューションの説明を続けます。
私の目標は、単一の DB コンテキストを使用して、ユーザーまたは ID 関連のデータとカスタム アプリケーション データの両方にアクセスできるようにすることでした。これを達成するためにApplicationDbContext
、新しいプロジェクトを作成するときに自動的に作成されるクラスを完全に削除しました。
次に、新しいクラスを作成しましたMyDbContext
。
public class MyDbContext: DbContext
{
public MyDbContext() : base("name=DefaultConnection")
{
}
//
// These are required for the integrated user membership.
//
public virtual DbSet<IdentityRole> Roles { get; set; }
public virtual DbSet<ApplicationUser> Users { get; set; }
public virtual DbSet<IdentityUserClaim> UserClaims { get; set; }
public virtual DbSet<IdentityUserLogin> UserLogins { get; set; }
public virtual DbSet<IdentityUserRole> UserRoles { get; set; }
public DbSet<Movie> Movies { get; set; }
public DbSet<Order> Orders { get; set; }
public DbSet<Purchase> Purchases { get; set; }
}
フィールドRoles
、Users
、UserClaims
、はUserLogins
、UserRoles
提案されているように、メンバーシップ管理に必須です。ただし、私の場合、それらのタイプの名前は異なります(ApplicationUser
代わりにUser
、およびなどIdentityUserClaim
の代わりにUserClaim
)。それが、Antevirus に「ユーザーが見つからない」という問題があった理由だと思います。
また、私の場合、このようなフィールドが 8 つではなく 5 つあることがわかります。おそらく、これは Visual Studio のバージョンが異なるためです。
私が行った最後の変更はクラスAccountController
で、新しいコンテキストの使用を反映していますMyDbContext
。MyDbContext
ここでは、代わりにのインスタンスを渡しましたApplicationDbContext
前
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
{
}
後
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext())))
{
}