1) Che cosa sta succedendo qui:
Quando si crea una nuova MVC 5 applicazione e scegliere "Account singolo utente", un nuovo fornitore di ASP.NET Identità è incluso che utilizza Entity Framework 6 Code-First.
Microsoft ha adottato EF-Code-First per rendere Identità come personalizzabile possibile.
quando l'identità si accede per la prima volta, Entity Framework verifica se il database esiste. Se non diversamente configurato, utilizza "DefaultConnection"
per trovare il database delle identità. Se il database non esiste quando viene chiamato Identity, EF crea automaticamente il database.
Avviso la stringa di connessione contiene
`AttachDbFilename=|DataDirectory|\aspnet-WebApplication3-20140417072624.mdf`
Se si apre il App_Data cartella, si dovrebbe avere un file aspnet-WebApplication3-20140417072624.mdf.
Se si fa doppio clic su questo file mdf, il VS2013 Esplora server aprirà il vostro DB. Se si è già tentato di accedere a qualsiasi funzionalità di identità, si queste tabelle creato:
- _MigrationHistory
- ASPNetRoles
- ASPNetUserClaims
- ASPNetUserLogins
- ASPNetUsers
Per impostazione predefinita, la vostra applicazione è configurato per utilizzare SQL Server Compact (file MDF) in modo da non avere un vero e proprio SQL Server Istanza in esecuzione. Tutto questo è personalizzabile. Il nome del file MDF, lo schema di identità del database, la scelta di SQL Compact vs un vero e proprio SQL Server esempio. Cambia la tua stringa di connessione, o creane una nuova e passa questa nuova connessione al tuo contesto.
2) DOVE SI TROVA IL MIO CONTESTO?
Tutto questo è molto bello, ma una domanda importante che hai chiesto è fondamentalmente "Dove è il mio contesto?", e le altrettanto rilevanti domande implicite per quanto riguarda come è possibile personalizzare ulteriormente il vostro DB o alterare la logica di convalida.
Si noterà che il progetto fa riferimento a Microsoft.AspNet.Identity.EntityFramework
. Questo assembly è un'implementazione di IdentityDBContext<TUser>
e l'impianto della classe UserManager
.
Aprire il AccountController, e notare il costruttore ha UserManager
oggetto passato che a sua volta ha un oggetto new UserStore
passato, che viene approvato una ApplicationDbContext
.
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())))
Il ApplicationDbContext
è definito nei tuoi modelle cartella. All'interno di tale cartella, troverai un file IdentityModels.cs. Aprilo e vedrai
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
}
Qui è dove viene assegnato il tuo contesto di identità. è possibile modificare il nome della connessione passato al costruttore ApplicationDbContext
oppure definire e utilizzare un contesto diverso nel controller dell'account.
3) Come faccio a personalizzare MIO SCHEMA identità?
Un'altra classe definita in IdentityModels.cs file è la classe che eredita da ApplicationUser
IdentityUser
classe.
public class ApplicationUser : IdentityUser
{
}
Qualsiasi proprietà che si aggiungono a questa classe saranno persistenti nei vostri ASPNetUsers Table. Il resto dello schema è definito nella classe IdentityDbContext
. Così, mentre è possibile aggiungere più tabelle (ad esempio privilegi) allo schema di identità con l'aggiunta di un DBSet alla definizione del contesto,
public DBSet<Privileges> { get; set; }
alterare altre tabelle (ruoli, reclami, ecc) è anche possibile, ma molto più coinvolto . Ad esempio, per personalizzare la tabella Roles, è necessario implementare un NewIdentityRole
ereditato da IdentityRole
e aggiungere la relazione sostituendo il metodo OnModelCreating()
per il proprio contesto.
Questo articolo su Customizing Roles Tables fa un buon lavoro di descrizione dei passaggi coinvolti. Anche qui, scoprirai che ci sono grossi problemi investiti semplicemente nell'aggiungere nuove colonne. La rimozione di tabelle o colonne dallo schema originale creato nella classe IdentityDbContext
è probabilmente tanto problematica quanto la creazione della propria implementazione della classe IdentityDbContext
.
Vedere 'IdentityModel.cs' nella cartella' Modelli' nel modello MVC. – Shoe