2010-10-07 24 views
11

Ich erstellte eine DB Context-Klasse und fügte eine Verbindungszeichenfolge in meine Datei web.config wie in Scott Guthries Code First Development with Entity Framework 4 angewiesen hinzu. Ich führe es von einer Testmethode aus. Ich habe mehrere Datenbankfehler beim Ausführen der Tests erhalten, aber als ich die Klassen schließlich bereinigt hatte, hatte ich noch keine Datenbank im Ordner App_data.Entity Framework-Code generiert zuerst keine Datenbank

Ich habe Database.CreateIfNotExists() zum dbContext-Konstruktor hinzugefügt, aber immer noch keine SDF-Datei. Wer weiß, was ich falsch mache?

Antwort

23

Damit die Datenbank automatisch erstellt wird, muss der Name der Verbindungszeichenfolge genau wie der Name der DbContext-Unterklasse (mit Namespace) benannt werden.

Eg. Sagen Sie Ihre DB-Klasse ist wie folgt aus:

namespace MyNamespace 
{ 
    public class FooDb : DbContext 
    {  
     public DbSet<XXX> ABC{ get; set; } 
    } 
} 

Ihre Verbindungszeichenfolge so aussehen sollte:

<connectionStrings> 
    <add name="MyNamespace.FooDb" connectionString="Data Source=|DataDirectory|MyNamespace.FooDb.sdf" providerName="System.Data.SqlServerCe.4.0"/> 
    </connectionStrings> 
+0

Namespace oder nicht, does't Angelegenheit für mich. – Alex

3

Überprüfen Sie SQL Server Management Studio -> \ sqlexpress

Das ist, wo CF setzen ist. Alle meine Datenbanken, wenn ich keine Verbindungszeichenfolge angeben.

+0

True, ohne Verbindungszeichenfolge wird die Datenbank im Webserver-Arbeitsverzeichnis erstellt. – Jonx

2

Sehen Sie hier für Auto-Erstellung der .sdf mit EF 4.1 und SQL CE NuGet Paket (oder ein neues MVC 3-Projekt scheinbar):

http://www.goatly.net/2011/6/27/entity-framework-code-first-the-path-is-not-valid-check-the-directory-for-the-database.aspx

lange Geschichte kurz: eine leere erstellen App_Data-Ordner - Das SDF wird automatisch erstellt, aber nur, wenn der Ordner, in den es geht, vorhanden ist.

+0

-1 ohne Erklärung verletzt die Gemeinschaft, vor allem, wenn sie eine vernünftige Antwort ungültig machen. Das funktionierte für mich, und es dauerte lange, bis ich es herausgefunden hatte. Ich kam zu einem Posten zurück, der die Antwort nicht gegeben hatte, und lieferte, was ich gefunden hatte. Warum also das Minus? –

0

Stellen Sie sicher, Ihre DbContext richtige Verbindungszeichenfolge mit Manche Dinge ähnlich wie diese

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

Und in web.config

<add name="DefaultConnection" connectionString="Server=....;Connection Timeout=300;" providerName="System.Data.SqlClient" /> 
Verwandte Themen