2017-11-08 2 views
0

Ich habe eine vorhandene Datenbank mit meiner Anwendung Tabellen und ich bin im Begriff, eine neue Version für meine Anwendung mit MVC5 zu erstellen. Ich entschied mich dafür, AspNet Identity Framework als Teil meiner Anwendung zu verwenden.AspNet Identity ApplicationDbContext auf vorhandene Datenbank

die Visual Studio-Vorlage i verwendet, während das Projekt erstellen

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
    { 
    public ApplicationDbContext() 
    : base("DefaultConnection", throwIfV1Schema: false) 
    { 
    } 
    } 

So kann ich die Tabellen Benutzer, Rollen und andere ASPnet Identität Tabellen den Code Zugriff auf eine Datei „IdentityModel.cs“ und die Klasse hinzugefügt unter Verwendung von wie :

var context = new ApplicationDbContext(); 
context.Users.ToList(); 

Da Microsoft "Anwendung DbContext" (und nicht: Identität DbContext zum Beispiel) die Klasse gab den Namen, ich bin frage ich mich, ob diese Klasse als "Accessor" für alle anderen existierenden Tabellen verwendet werden sollte, die nicht mit AspNet Identity verbunden sind oder nicht?

Ohne den so generischen Namen der Klasse "ApplicationDbContext" würde ich einfach mein Entity-Framework-Projekt verwenden, das ich meiner Lösung hinzugefügt habe, um auf die anderen Tabellen meiner Anwendung zuzugreifen, aber ich frage mich, was die "Best Practices" sind. Um den gleichen AspNet Identity ApplicationDbContext-Accessor (und wie?) Zu verwenden oder mit zwei Db-Accessoren zu arbeiten, wurde eine der AspNet Identity-Tabellen und eine für das Entitätsframework für den Rest der Tabellen erstellt (Db First).

es sieht mehr Logik aus, den gleichen dbContext für alle Tabellen, AspNet-Identität und alle anderen Tabellen zu verwenden, die ich in einer separaten EntityFramework edmx-Datei habe. Wie kann ich beide in einem dbContext verwenden?

+1

Verwenden Sie einen einzelnen Kontext. Fügen Sie die Identitätsframework-Tabellen entweder zu Ihrem vorhandenen Kontext hinzu oder fügen Sie Ihre Tabellen dem generierten Kontext hinzu. Es macht keinen Unterschied. Wenn Sie den Namen des Kontexts nicht mögen, benennen Sie ihn um. Die Vorlage erzeugt nur einen Startpunkt, es ist kein Kanon. –

+0

@CraigW. - Danke für Ihren Kommentar, ich benutze Entity Framework edmx Datei für den Test der Anwendungstabellen. Wie kann ich den gleichen db-Kontext der asp.net-Identität verwenden? – Omtechguy

Antwort

0

AspNet Identity bieten so etwas wie Benutzer-Manager, sollte es Ihr Problem lösen. Sie müssen nicht an realen Tabellen arbeiten, AspNet Identity sollte die Tabellenstruktur abdecken und sollte Operationen auf hoher Ebene ermöglichen. Ihr Benutzermodell sollte die IdentityModel-Klasse erben, und Sie können dann Ihr eigenes benutzerdefiniertes Modell erstellen.

+0

Danke für den Kommentar. Ich weiß das. Ich versuche etwas anderes zu verstehen, – Omtechguy

0

Es klingt wie Teil Ihres Problems ist, dass während IdentityFrameworkcode-first Entity-Framework verwendet Sie Code-First nicht für den Rest Ihrer Anwendung verwenden, stattdessen mit dem älteren Edmx-Designer-Ansatz. Ich würde nicht versuchen, die beiden in einen einzigen Kontext zu mischen.

Darüber hinaus, weil ApplicationDbContext erbt von IdentityDbContext Ich würde es in Ruhe lassen. Die Basisklasse implementiert Dinge wie OnModelCreating und ValidateEntity. Wenn Sie Ihren anderen Kontext für IdentityFramework verwenden möchten, müssen Sie entweder den anderen Kontext von IdentityDbContext erben - was eine schlechte Semantik ist, weil es sich nicht nur um einen Identitätskontext handelt -, oder Sie müssten diese implementieren Methoden manuell.

Es ist jedoch einfach, den Identitätsrahmenkontext auf dieselbe Datenbank wie Ihre anderen Entitätsframeworkelemente zu verweisen. Ersetzen Sie einfach "DefaultConnection" in Ihrem ApplicationDbContext mit dem Namen der Verbindungszeichenfolge, die Sie für Ihre anderen Sachen verwenden.

Verwandte Themen