È possibile utilizzare la nuova identità Asp.net con Database First e EDMX? O solo con il codice prima?
Ecco cosa ho fatto:
1) Ho creato un nuovo progetto MVC5 e ho fatto creare alla nuova identità le nuove tabelle utente e ruoli nel mio database.
2) Ho quindi aperto il mio file Database First EDMX e trascinato nella nuova tabella Identity Users poiché ho altre tabelle ad esso correlate.
3) Dopo aver salvato EDMX, il generatore Database First POCO creerà automaticamente una classe utente. Tuttavia, UserManager e RoleManager prevedono che una classe User erediti dal nuovo spazio dei nomi Identity (Microsoft.AspNet.Identity.IUser), quindi l'utilizzo della classe User POCO non funzionerà.
Immagino che una possibile soluzione sia modificare le mie classi di generazione POCO in modo che la mia classe utente erediti da IUser?
Oppure ASP.NET Identity è compatibile solo con Code First Design?
++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++
Aggiornamento: seguendo il suggerimento di Anders Abel di seguito, questo è quello che ho fatto. Funziona, ma mi chiedo se esista una soluzione più elegante.
1) Ho esteso la mia classe Utente entità creando una classe parziale all'interno dello stesso spazio dei nomi delle mie entità generate automaticamente.
namespace MVC5.DBFirst.Entity
{
public partial class AspNetUser : IdentityUser
{
}
}
2) Ho cambiato il mio DataContext per ereditare da IdentityDBContext invece di DBContext. Tieni presente che ogni volta che aggiorni il tuo EDMX e rigeneri le classi DBContext ed Entity, dovrai reimpostarlo su questo.
public partial class MVC5Test_DBEntities : IdentityDbContext<AspNetUser> //DbContext
3) All'interno della classe di entità utente generata automaticamente, è necessario aggiungere la parola chiave override ai seguenti 4 campi o commentare questi campi poiché sono ereditati da IdentityUser (Passaggio 1). Nota che ogni volta che aggiorni il tuo EDMX e rigeneri le classi DBContext ed Entity, dovrai reimpostarlo su questo.
override public string Id { get; set; }
override public string UserName { get; set; }
override public string PasswordHash { get; set; }
override public string SecurityStamp { get; set; }