Asp.Net L'Identité IdentityDbContext<TUser> de causer des problèmes pour les champs ajoutés à AspNetRoles table

StackOverflow https://stackoverflow.com//questions/22051140

Question

IdentityDbContext de causer des problèmes pour les propriétés et les champs ajoutés à AspNetRoles

Je crois que le problème est ici avec IdentityDbContext prendre un IdentityUser type:

public class MyIdentityDb : IdentityDbContext<ApplicationUser>
{
    public IdentityDb()
        : base("IdentityDb")
    {
    }
}

Mais laissez-moi vous expliquer...

C'est merveilleux que nous pouvons ajouter des champs à la AspNetUsers tableau en ajoutant des propriétés de notre ApplicationUser classe qui hérite de IdentityUser.Exemple:

public class ApplicationUser : IdentityUser
    {
        [Required]
        [StringLength(50)]
        public string FirstName { get; set; }

        [Required]
        [StringLength(50)]
        public string LastName { get; set; }
    }

Donc naturel que l'on peut ajouter des champs à la AspNetRoles table en ajoutant des propriétés à une ApplicationRole classe qui hérite de IdentityRole.Exemple:

public class ApplicationRole : IdentityRole
{
    [Required]
    [StringLength(50)]
    public string ProperName { get; set; }
}

Fonctionne parfaitement.On peut voir le champ dans la base de données.Nous pouvons ajouter des données.Exemple:

RoleManager<ApplicationRole> roleManager = new RoleManager<ApplicationRole>(new RoleStore<ApplicationRole>(new MyIdentityDb()));

var role = new ApplicationRole() { Name = name, ProperName = propername };
var result = await roleManager.CreateAsync(role);

Mais maintenant, nous nous heurtons à un problème lorsque vous essayez d'accéder aux données.Exemple:

Notre ViewModel:

public class IndexViewModel
{
    public IList<ApplicationUser> Users { get; set; }
    public IList<ApplicationRole> Roles { get; set; }
}

Sur notre Contrôleur:

private MyIdentityDb myIdentityDb = new MyIdentityDb();

Notre méthode de l'Indice sur notre contrôleur:

public ViewResult Index(int? page)
{
     return View(new IndexViewModel
     {
          Users = myIdentityDb.Users.ToList(),
          Roles = myIdentityDb.Roles.ToList()
     });
}

L'erreur est sur “myIdentityDb.Les rôles.ToList()” et indique “Impossible de convertir implicitement le type de System.Collection.Generic.List<Microsoft.AspNet.Identity.EntityFramework.IdentityRole> to System.Collections.Generic.IList<MyApp.Models.ApplicationRole>

Bien sûr, nous pourrions changer notre ViewModel à utiliser le type IdentityRole comme l'exemple suivant, mais on ne peut pas obtenir à la nouvelle “ProperName” de la AspNetRoles table:

public class IndexViewModel
{
    public IList<ApplicationUser> Users { get; set; }
    public IList<IdentityRole> Roles { get; set; }
}

Donc, on pourrait essayer de créer une autre base de données de la classe et de passer un IdentityRole type, au lieu de IdentityUser:

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

public class MyIdentityRolesDb : IdentityDbContext<ApplicationRole>
{
    public MyIdentityRolesDb()
        : base("MyIdentityDb")
    {
    }
}

Et de changer notre contrôleur:

private MyIdentityDb myIdentityDb = new MyIdentityDb();
private MyIdentityRolesDb myIdentityRolesDb = new MyIdentityRolesDb();

Et de changer notre méthode de l'Indice sur notre contrôleur:

public ViewResult Index(int? page)
{
     return View(new IndexViewModel
     {
          Users = myIdentityDb.Users.ToList(),
          Roles = myIdentityRolesDb.Roles.ToList()
     });
}

Mais nous nous retrouvons avec le même problème;le fait que IdentityDbContext prend un IdentityUser type.

Des idées comment nous pouvons obtenir une liste de Rôles avec les champs personnalisés/propriétés?

Était-ce utile?

La solution

Donc, si vous mettez à niveau vers la version 2.0.0 beta paquets, vous devriez être en mesure d'obtenir un IQueryable de ApplicationRole directement à partir du gestionnaire de rôles:

roleManager.Roles

Si vous n'avez pas à tomber à la DB contexte, c'était une limitation de la version 1.0 qui a été résolu dans la version 2.0.

Autres conseils

Veuillez consulter l'article suivant qui explique en détail ce que vous essayez de faire http://typecastexception.com/post/2014/02/13/ASPNET-MVC-5-Identity-Extending-and-Modifying-Roles.aspx

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top