0

Ich habe eine sehr einfache ModellklasseNach dem Entity Framework Code-First-Ansatz, warum wird die Verbindungszeichenfolge nicht erstellt? (Kein DB erstellt)

class Student 
{ 
    public int StudentID { get; set; } 
    public string Ad { get; set; } 
    public string Soyad { get; set; } 
} 

und eine sehr grundlegende DbContext Klasse

class StudentContext: DbContext 
{ 
     public StudentContext() :base("StudentDB") 
     { 
     } 

     public DbSet<Student> Students { get; set; } 
} 

ich sowohl mit einer Konsolenanwendung versucht haben und auch eine ASP.NET MVC 5 Projekt. Weder funktioniert:/

Wenn ich die Anwendung erstellen und ausführen, wird keine Datenbank erstellt. Beim Überprüfen habe ich festgestellt, dass, obwohl ich im Basiskonstruktor sogar einen Parameter für DB Name übergeben habe, keine Verbindungszeichenfolge in app.config oder web.config eingefügt wurde.

Das Entity Framework Nuget-Paket wurde vor jeder Testversion installiert und EF funktionierte für meine vorherigen Datenbank-Projekte. Ich habe keine Ahnung, warum ich beim ersten Lauf keine Datenbank erstellen kann. Ich habe sogar versucht folgende Zeile in Main() Funktion der Konsole Projekt hinzuzufügen:

StudentContext ctx = new StudentContext(); 
ctx.Database.CreateIfNotExists(); 

Hat nicht funktioniert:/

+0

Zuerst aktualisieren sie Ihr Paket (Entity) und Migrationspaket auf yo hinzufügen Dein Projekt. Stellen Sie sicher, dass Ihre 'web.config' in Ordnung ist. Probieren Sie diesen Weg aus und sehen Sie, ob Sie helfen. – pnet

Antwort

0

Wo heißt es, dass die DbContext (string) würde eine Verbindungszeichenfolge in app.config erstellen? Der Abschnitt Bemerkungen der DbContext class beschreibt die Verbindungszeichenfolge. Aber sagt nirgends, dass die DbContext-Klasse app.config anpassen würde.

Ändern der app.config wäre unerwünschtes Verhalten. Was, wenn Sie möchten, dass der gleiche DbContext zwei ähnliche Datenbanken steuert, zum Beispiel um Daten von einer Datenbank in die andere zu kopieren?

dbContext.Database.Connection.ConnectionString; 

Wenn Sie schreiben, um die Verbindungszeichenfolge an den App.Config, ich würde vorschlagen, dass Sie eine Erweiterungsfunktion für schreiben:

Um die die Verbindungszeichenfolge nach einer DbContext Instanz Verwendung zu schaffen bekommen es:

static class DbContextExtensions 
{ 
    public static void SaveConnectionString (this DbContext dbContext) 
    { 
     string connectionString = dbContext.Database.Connection.ConnectionString; 
     SaveConnectionString(connectionString); 
    } 
    private static void SaveConnectionString(string connectionString) 
    { // save the string where you want it, for instance app.config 
     // out of scope of this question 
    } 
} 

Nutzung

using(var dbConext = new StudentContext("..."); 
{ 
    dbContext.SaveConnectionString(); 
} 
0

Alternative Option wäre - "Initializer". Wenn Sie auf Anwendung erstellen Datenbank wollen verwenden entweder starten:

context.Database.Initialize(true); 

aber Sie können nicht verwenden, wenn Sie mit „Initializer

ctx.Database.CreateIfNotExists(); 
Verwandte Themen