Est-il possible d'utiliser le nouveau Asp.net Identity avec Database First et EDMX? Ou seulement avec Code First?
Voici ce que j'ai fait:
1) J'ai créé un nouveau projet MVC5 et j'ai utilisé le nouveau Identity pour créer les nouvelles tables Utilisateurs et Rôles dans ma base de données.
2) Ensuite, j'ai ouvert mon fichier EDMX Database First et j'ai fait glisser la nouvelle table Utilisateurs de Identity car j'ai d'autres tables qui y sont liées.
3) En enregistrant l'EDMX, le générateur de POCO Database First va automatiquement créer une classe Utilisateur. Cependant, UserManager et RoleManager attendent une classe Utilisateur héritant de l'espace de noms Identity (Microsoft.AspNet.Identity.IUser), donc utiliser la classe Utilisateur POCO ne fonctionnera pas.
Je suppose qu'une solution possible serait de modifier mes classes de génération de POCO pour que ma classe Utilisateur hérite d'IUser?
Ou ASP.NET Identity est-il uniquement compatible avec la conception Code First?
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mise à jour: Suivant la suggestion d'Anders Abel ci-dessous, voici ce que j'ai fait. Cela fonctionne, mais je me demande s'il y a une solution plus élégante.
1) J'ai étendu ma classe Utilisateur d'entité en créant une classe partielle dans le même espace de noms que mes entités générées automatiquement.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) J'ai changé mon DataContext pour qu'il hérite de IdentityDBContext au lieu de DBContext. Notez que chaque fois que vous mettez à jour votre EDMX et régénérez les classes DBContext et Entity, vous devrez revenir à cela.
public partial class MVC5Test_DBEntities : IdentityDbContext //DbContext
3) Dans votre classe Entité Utilisateur générée automatiquement, vous devez ajouter le mot-clé override aux 4 champs suivants ou commenter ces champs car ils sont hérités de IdentityUser (étape 1). Notez que chaque fois que vous mettez à jour votre EDMX et régénérez les classes DBContext et Entity, vous devrez revenir à cela.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }