2014-10-19 1 views
6

Ich habe Probleme, das gesamte ASP.Net Identity Framework zu verstehen, ich habe zuerst versucht, Identity 1.0 zu einer bestehenden Anwendung zu integrieren, aber ich endete mit 2 DbContext-Klassen, meine Anwendungsdaten waren auf MyDbContext, und Identität Benutzerdaten auf IdentityDbContext.Erweitern von ASP.NET Identity 2.0

Ich möchte einen einzigen DbContext für meine Anwendungsdaten und Identitätsdaten verwenden, und ich fand auf einer anderen Frage, dass ich IdentityDbContext genauso verwenden kann, wie ich DbContext verwende; Ich denke jedoch, dass ich etwas vermisse.

Ich verwende das Beispielprojekt aus dem Identitäts Team

PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre 

und versuchte DbSet Objekte, die dem ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection") 
    { 
    } 

    static ApplicationDbContext() 
    { 
     // Set the database intializer which is run once during application start 
     // This seeds the database with admin user credentials and admin role 
     Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer()); 
    } 

    public virtual DbSet<Student> students { get; set; } 
    public virtual DbSet<Teachers> teachers { get; set; } 

    public static ApplicationDbContext Create() 
    { 
     return new ApplicationDbContext(); 
    } 
} 

Ich bin mit dem ApplicationDbInitializer Samen Methode einzufügen jene 2 aufzufüllen Tabellen, etwas in der Art:

Student s = new Student { Name = "John" ... }; 
db.students.Add(s); 
db.SaveChanges(); 

Aber EF scheint nicht um diese 2 Tabellen zu erstellen, und die Seed-Methode wird nicht aufgerufen, was ist los?

EDIT:

Nun, ich brauchte Code auszuführen, der die Datenbank verwendet für EF um die Datenbank zu löschen und neu erstellen.

Gibt es einen Overhead bei der Verwendung von IdentityDbContext, um alle meine Anwendungsdaten zu verwalten? Was ist der Unterschied zwischen der Verwendung von IdentityDbContext und der Verwendung der generischen Version IdentityDbContext < IdentityUser>?

Antwort

4

In den meisten Fällen wird die Verwendung von nur einem Entity Framework-Kontext bevorzugt, da Sie dann nur diesen einzelnen verwalten müssen, was weniger Overhead bedeutet. Der Unterschied zwischen den beiden ist, dass IdentityDbContext einfach eine Klasse ist, die von DbContext abgeleitet wird (wie Sie es bei der Erstellung tun würden), aber es enthält zusätzliche DbSets, die sich mit der Authentifizierung befassen, so dass Sie sie nicht selbst implementieren müssen . Ableiten von IdentityDbContext ist in Ordnung. Für weitere Informationen können Sie sich die documentation ansehen.