0

私の MVC5 プロジェクトでは、次の実装でIdentityUserクラスを拡張しました。DbContext

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

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            modelBuilder.Entity<IdentityUser>()
               .ToTable("Users");
            modelBuilder.Entity<ApplicationUser>()
                .ToTable("Users");
        }
}

ApplicationUserクラスの使用:

public class ApplicationUser : IdentityUser
{
    public string EmailAddress { get; set; }
    public string Name { get; set; }
    public DateTime JoinDate { get; set; }
    public string ConfirmationToken { get; set; }
    public bool EmailIsConfirmed { get; set; }
}

ただし、同じことを実行してIdentityRoleクラスを拡張しようとすると、機能しません。ApplicationRoleから継承するクラスを作成する(そしてMVC プロジェクト内のIdentityRoleのすべてのインスタンスを に変更する) だけでは、データベースからロールが返されません。たとえば、次のように使用します。IdentityRoleApplicationRole

RoleManager<ApplicationRole> RoleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));

を呼び出すと、結果カウントは 0 になりますRoleManager.Roles

誰かがこれをまだ行っていて、何らかのガイダンスを提供できますか?

更新 DB Seed メソッドを新しいものを使用するように変更するのを忘れていましたApplicationRole- まだ使用していIdentityRoleました。その後、DBValidation エラーが発生し続けたため、データベースに更新を適用できませんでした。この投稿のコードの一部を適応させた後ValidateEntity、DbContextのメソッドをオーバーライドすることですべてを機能させることができました

4

1 に答える 1

3

Microsoft.AspNet.Identity.EntityFramework.IdentityRole を拡張する方法

  1. から継承していることを確認しIdentityRoleてくださいApplicationRole
  2. ApplicationDbContextを直接操作できるように、に以下を追加してくださいApplicationRole

    new public DbSet<ApplicationRole> Roles { get; set; }

  3. 次の手順に従ってください

    • 移行を有効にする
    • 追加移行「InitialSetup」
    • データベースを更新する
    • モデル プロパティを変更する
    • 追加移行「ModificationName」
    • データベースを更新する

RoleManager を作成するためのコードはこれで問題ありません。

RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new ApplicationDbContext()));
ApplicationRole role = roleManager.FindByName("Admin");
  • RoleManager<ApplicationRole>名前のプロパティはありません"Roles"
  • ApplicationDbContextという名前のプロパティがあります"Roles"。ステップ 2 に従っているため、このプロパティは次のように返されます。DbSet<ApplicationRole>
于 2013-11-13T10:16:20.893 に答える