Pourquoi est-UserManager.CreateIdentityAsync() à la recherche de IdentityRole et comment les corriger?

Je suis en utilisant Identity2.0 avec MVC5 CodeFirst j'ai rallongé le IdentityUser et IdentityRole comme ceci:

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

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

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

    [Required]
    public string Description { get; set; }
}

public class MyAppDb : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
    public MyAppDb()
        : base("MyAppDb")
    {
    }
}

Avis MyAppDb hérite de IdentityDbContext mais que je passe un ApplicationRole au lieu de IdentityRole. Mon ApplicationRole hérite de IdentityRole donc cela ne devrait pas être un problème.

MAIS...

Mon AccountController est de lancer cette erreur:

The entity type IdentityRole is not part of the model for the current context. 

À la UserManager.CreateIdentityAsync(...) dans ce code:

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
     AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
     var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
     AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}

La user est créé ici:

        var user = await UserManager.FindAsync(model.UserName, model.Password);
        if (user != null)
        {
            await SignInAsync(user, model.RememberMe);
            return RedirectToLocal(returnUrl);
        }

Qu'est-ce que les "dysfonctionnements majeurs"? 😉

Mise à JOUR:
Je suis assez sûr que la question a quelque chose à voir avec la UserStore ici:

    public class AccountController : Controller
    {
        public AccountController ()
            : this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyAppDb())))
        {
        }

        public AccountController (UserManager<ApplicationUser> userManager)
        {
            UserManager = userManager;
            UserManager.PasswordValidator = (IIdentityValidator<string>)new MinimumLengthValidator(8);
            UserManager.UserValidator = new UserValidator<ApplicationUser>(UserManager) { AllowOnlyAlphanumericUserNames = false };
        }

        public UserManager<ApplicationUser> UserManager { get; private set; }
...

Comment puis-je obtenir le UserStore savoir sur ApplicationRole quand je ne peux que passer un argument?

  • Il peut être utile de noter que ce projet a commencé avec AspNetIdentity1.* et puis a été mis à jour à AspNetIdentity2.0. Après la mise à jour j'ai étendu la IdentityRole, changé la signature de MyAppDb comme vous pouvez le voir ci-dessus dans ma question, et le problème a commencé.
  • A votre user ont tout Roles associés. Si oui, de montrer comment est user créé.
  • Oui. J'ai créé l'Utilisateur comme ceci: var result = attendent UserManager.CreateAsync(utilisateur, modèle.Le mot de passe); Où "utilisateur" est un ApplicationUser. J'ai ajouté à l'Utilisateur de Rôles directement dans la base de données de la copie d'un nom d'utilisateur à partir de la table des Utilisateurs et un RoleId à partir du tableau des Rôles. Très linéaire.
  • J'ai appelé les ApplicationUser user.
  • Le ApplicationUser user argument qui est passé à la SignInAsync méthode, comment est-il créé?
  • BTW, quelle est la version de votre Microsoft.AspNet.Identity.EntityFramework assemblée?
  • J'ai mis à jour ma question pour montrer où {utilisateur} est en cours de création.
  • Microsoft.AspNet.L'identité.EntityFramework est 2.0. J'ai mis à jour Microsoft.AspNet.L'identité à l'aide de Gestionnaire de Package Nuget donc mis à jour automatiquement les dépendances.
  • Vous avez besoin de joindre le texte de l'backtick "'.

InformationsquelleAutor Sean Newcome | 2014-03-26