Per scopi di test, vorrei essere in grado di rilasciare manualmente e ricreare un DB utilizzando EF CodeFirst CTP5. Come lo farei?EF CodeFirst CTP5 - Rilasciare manualmente e creare DB?
risposta
Il DbDatabase classe disponibile come proprietà sulla vostra DbContext oggetto offre una serie di metodi per lavorare direttamente con il database. È possibile utilizzare il Crea e Elimina metodo per questa materia:
using (var context = new YourContext())
{
context.Database.Delete();
context.Database.Create();
// Or
context.Database.CreateIfNotExists();
}
E non dimenticare di chiudere qualsiasi connessione al tuo database (da Visual Studio o così) altrimenti riceverai un'eccezione dicendo che il database è in uso ... –
Chiama Database.Connection.Close() prima di Database.Delete() non aiuta Viene ancora visualizzato il messaggio che il database è in uso. – Greg
Greg, è perché il database è davvero in uso. Potresti averlo aperto in Esplora server: prova prima a chiudere la connessione. – mjohnsonengr
Mi rendo conto che è datato, ma non ho potuto ottenere la soluzione accettata lavorare così ho arrotolato una soluzione rapida ...
using System;
using System.Data.Entity;
namespace YourCompany.EntityFramework
{
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
Seed = seed ?? delegate {};
}
public Action<T> Seed { get; set; }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
}
Questo funziona per me e supporta facilmente la semina.
Questo funziona per me, ma non dave risposta con Entity Framework 5.0. Dovrai innescare un viaggio nel database che piace una query per attivare l'azione.
Global.asax
Database.SetInitializer<MedicalVarianceDataContext >(new DataInitializer());
Altrove
public class DropDatabaseInitializer<T> : IDatabaseInitializer<T> where T : DbContext, new()
{
public DropDatabaseInitializer(Action<T> seed = null)
{
}
protected virtual void Seed(T context) { }
public void InitializeDatabase(T context)
{
if (context.Database.Exists())
{
context.Database.ExecuteSqlCommand("ALTER DATABASE " + context.Database.Connection.Database + " SET SINGLE_USER WITH ROLLBACK IMMEDIATE");
context.Database.ExecuteSqlCommand("USE master DROP DATABASE " + context.Database.Connection.Database);
}
context.Database.Create();
Seed(context);
}
}
Credo che si dovrà anche aggiungere context.savechanges();
protected override void Seed(MedicalVarianceDataContext context)
{
new List<ViewLookUpIndividualUnit>{
new ViewLookUpIndividualUnit{ MvrsIndividualUnit="Clinic" ,Active=true}
}.ForEach(k => context.ViewLookUpIndividualUnits.Add(k));
base.Seed(context);
context.SaveChanges();
}
Ho aggiunto una modifica su Dave ma non so se avverrà. Ecco. – hidden
Attenzione che se il nome del tuo database contiene trattini dovrai farlo: '[My-DatabaseName-with-hyphens]' nella parte 'ExecuteSqlCommand'. –
- 1. EF Codefirst e RDLC Reports
- 2. Come ricreare la mia tabella EF CodeFirst?
- 3. ef 5 codefirst enum collezione non generata nella banca dati
- 4. Come ottenere i metadati dbset da EF CodeFirst DbContext?
- 5. Troncare o rilasciare e creare tabella
- 6. L'upsert EF deve essere eseguito manualmente?
- 7. EF 4.2, CodeFirst - Proprietà di navigazione all'interno di un tipo complext
- 8. EF (Entity Framework) 4.3 Lo strumento di migrazione non funziona su EF 4.1 DB
- 9. EF CTP5 - Caricamento Eager fortemente tipizzato - Come includere proprietà di navigazione nidificate?
- 10. Genera campi tipo di denaro utilizzando prima il codice EF CTP5
- 11. Come creare manualmente un tf.Summary()
- 12. Come creare ordinabile, trascinare e rilasciare l'elenco multilivello in Javascript
- 13. impossibile rilasciare e creare database nel server sql
- 14. Impossibile creare mongodb db
- 15. django non può rilasciare il DB di test tramite pgbouncer
- 16. metodo seed non chiamato con EntityFramework CodeFirst
- 17. EF CodeFirst: o il parametro @objname è ambiguo o @objtype dichiarata (colonna) è sbagliato
- 18. Memorizzazione TimeSpan con Entity Framework Codefirst - SqlDbType.Time trabocco
- 19. Come rendere Entity Framework CTP5 compatibile con SQLite?
- 20. Colonna calcolata in codice EF First
- 21. Creare VisualState personalizzato in xaml e impostarlo manualmente in CodeBehind
- 22. Codice EF convalida la proprietà univoca?
- 23. ASP - Core Migrate EF Core SQL DB all'avvio
- 24. Come creare manualmente una copia profonda
- 25. Creare symfony2 ricordami cookie manualmente (FOSUserBundle)
- 26. Entity Framework CTP5 - Come chiamare la stored procedure?
- 27. EF Migrations for Database -approccio?
- 28. Trascinare il trascinamento e rilasciare
- 29. Trascinare e rilasciare in MobileSafari?
- 30. Stash Git applicare e rilasciare
è possibile utilizzare il Database.SetInitializer, leggere nei commenti qui http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an -existing-database.aspx –
Si otterrà comunque regolarmente la seguente eccezione: Impossibile rilasciare il database "..." perché è attualmente in uso. Riavvia VisualStudio e sei a posto. Questa funzionalità CodeFirst è ancora abbastanza instabile. – RedGlyph