2011-08-30 20 views
9

Sto utilizzando EF 4.1 e ho creato un repository utilizzando DBContext ecc. Stringa di connessione impostata per puntare a un'edizione Dev di SQL Server 2008 R2.Codice Entity Framework 4.1 Prima non creare tabelle

Quando si esegue un'app console che chiama il mio gateway che a sua volta aggiunge un'entità e salva, viene generata un'eccezione dicendo che non riesce a trovare la tabella. Quando guardo il mio db, c'è un database creato ma non ci sono tabelle create automaticamente tranne EmdMetadata.

mi sto perdendo qualcosa?

Mark

risposta

8

Per impostare la caduta di auto e creare si farebbe qualcosa di simile ...

public class MyDbContext : DbContext 
{ 
    public IDbSet<Foo> Foos { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     Database.SetInitializer(new MyDbContextInitializer()); 

     base.OnModelCreating(modelBuilder); 
    } 
} 

public class MyDbContextInitializer : DropCreateDatabaseIfModelChanges<MyDbContext> 
{ 
    protected override void Seed(MyDbContext dbContext) 
    { 
     // seed data 

     base.Seed(dbContext); 
    } 
} 
+0

Sembra proprio quello di cui ho bisogno, non potrei chiamarlo nell'app perché avevo un layer su Dbcontext in un'altra DLL, mantenendo dbcontext interno. – Mark

+3

Questo non ha risolto il mio problema, ma per coloro che hanno ancora ottenuto questo risultato, OnModelCreating utilizza DbModelBuilder invece di ModelBuilder. Non sono sicuro quando è cambiato. – Pieter

8

È possibile creare le tabelle da soli - il modo più semplice è:

IObjectContextAdapter adapter = (IObjectContextAdapter)context; 
string script = adapter.ObjectContext.CreateDatabaseScript(); 
context.Database.ExecuteSqlCommand(script); 

Dove contesto è il mio EF 4.1 contesto del database. Prima di questo codice ho eliminato tutte le tabelle (dall'ultima volta che ho creato il db), e dopo di ciò l'ho seminato con i dati.

+0

Davvero? Stavo seguendo alcuni blog-tutorial e sembravano averli generati automaticamente quando chiamavano save. – Mark

+0

L'ho usato solo per un mese, e questo era l'unico modo in cui avrei potuto rilasciare, ricostruire e seminare il mio database in modo affidabile. Forse ho rinunciato troppo facilmente. – iandotkelly

+0

Ho esaminato un paio di tutorial (trovati su google) - uno incluso alcuni esempi di script di creazione SQL, uno come si dice crea automaticamente il database. Come te, ho scoperto che questo non funzionava per la struttura db che ho creato, che includeva alcune integrazioni referenziali e cancellazioni a cascata. – iandotkelly

-1

È necessario aggiungere questo al tuo Application_Start()

Database.SetInitializer(new MyDbContextContextInitializer()); 
var context = new MyDbContextContext(); 
context.Database.Initialize(true); 

L'ultima riga costringe il DB a creato

1

Meglio: aggiungere l'inizializzazione al costruttore statico, come questo:

public class MyDbContext : DbContext 
{ 
    static MyDbContext() 
    { 
     Database.SetInitializer(new MyDbContextContextInitializer()); 
    } 
} 
Problemi correlati