2010-10-07 15 views
11

Ho creato una classe Contesto db e aggiunto una stringa di connessione nel mio file web.config come indicato in Scott Guthrie's Code First Development with Entity Framework 4. Lo sto eseguendo da un metodo di prova. Ho ricevuto diversi errori di database nell'esecuzione dei test, ma quando ho ripulito le classi in modo che il test fosse riuscito, non avevo ancora alcun database nella cartella App_data.Codice quadro entità Prima non genera database

Ho aggiunto Database.CreateIfNotExists() al costruttore dbContext, ma ancora nessun file sdf. Qualcuno sa cosa sto sbagliando?

risposta

23

Per la creazione automatica del database, il nome della stringa di connessione deve essere denominato esattamente come il nome della sottoclasse DbContext (con spazio dei nomi).

Es. Di 'la classe DB è simile a questo:

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

la stringa di connessione dovrebbe apparire in questo modo:

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

Namespace o no, importa does't per me. – Alex

3

Controllare SQL Server Management Studio -> \ sqlexpress

Ecco dove CF è stata messa. tutti i miei database quando non si specifica una stringa di connessione.

+0

Vero, senza stringa di connessione, il database viene creato nella directory di lavoro del server web. – Jonx

2

Vedi qui per auto-creazione del .sdf con EF 4.1 e il pacchetto di SQL CE NuGet (o un nuovo progetto MVC 3 apparentemente):

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

Per farla breve: Creare un vuoto Cartella App_Data: la sdf viene creata automaticamente, ma solo se è presente la cartella in cui si trova.

+0

-1 senza spiegazione feriscono la comunità, soprattutto se invalidano una risposta ragionevole. Questo ha funzionato per me, e ci è voluto molto tempo per capire. Sono tornato a un post che non aveva fornito la risposta e fornito ciò che avevo trovato. Allora perché il meno? –

0

Assicurarsi che il DbContext utilizzando corretta stringa di connessione Qualche cosa simile come questo

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

E nel web.config

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