For testing purposes I would like to manually be able to drop and recreate a DB using EF CodeFirst CTP5. How would I do this?
The DbDatabase class available as a property on your DbContext object offers a set of methods for directly working with database. You can use the Create and Delete method for this matter:
using (var context = new YourContext())
{
context.Database.Delete();
context.Database.Create();
// Or
context.Database.CreateIfNotExists();
}
This works for me but not dave answer with entity framework 5.0. You will have to trigger a database trip that like a query in order to trigger the action.
Global.asax
Database.SetInitializer<MedicalVarianceDataContext >(new DataInitializer());
Elsewhere
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);
}
}
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();
}
I realize this is dated but I couldn't get the accepted solution working so I rolled a quick solution...
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);
}
}
}
This works for me and supports seeding easily.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With