Инициализатор се изпълнява, когато имате нужда от достъп до базата данни, така че ако искате да създадете база данни при стартиране на приложението, използвайте нещо от следното:
context.Database.Initialize(true); //If set to true the initializer is run even if it has already been run.
context.Database.Create()
http://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.103).aspx
CreateDatabaseIfNotExists Реализация на IDatabaseInitializer, която ще пресъздаде и по желание ще зареди повторно базата данни с данни само ако базата данни не съществува. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.
Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
http://msdn.microsoft.com/ en-us/library/gg679221(v=vs.103).aspx
DropCreateDatabaseIfModelChanges Реализация на IDatabaseInitializer, която ще изтрие, пресъздаде и по желание ще зареди отново базата данни с данни само ако моделът е променен след създаването на базата данни. Това се постига чрез записване на хеш на модела на магазина в базата данни, когато се създава, и след това сравняване на този хеш с такъв, генериран от текущия модел. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
http://msdn.microsoft.com/ en-us/library/gg679604(v=vs.103).aspx
DropCreateDatabaseAlways
Реализация на IDatabaseInitializer, която винаги ще създава отново и по избор ще зарежда отново базата данни с данни при първото използване на контекст в домейна на приложението. За да заредите базата данни, създайте производен клас и заменете метода за зареждане.
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
http://msdn.microsoft.com/ en-us/library/gg679506(v=vs.103).aspx
Препоръчвам ви да разгледате Миграции ако искате да проследите, върнете промените, които сте направили във вашата DB към предишното състояние http ://msdn.microsoft.com/hr-hr/data/jj591621 .
АКТУАЛИЗАЦИЯ
context.Database.Initialize(true);
За MVC приложение добавете раздел към Application_Start()
метод в Global.asax
protected void Application_Start() {
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
// Forces initialization of database on model changes.
using (var context= new MyContext()) {
context.Database.Initialize(force: true);
}
}
Също така можете да използвате персонализиран инициализатор:
public class MyDbInit : DropCreateDatabaseAlways<MyContext>
{
}
и след това използвайте
Database.SetInitializer(new MyDbInit());
АКТУАЛИЗАЦИЯ 2
Направете ново празно MVC4 приложение, наречено DeleteDBOnEveryRequest .Поставете следното в Global.asax Application_start
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
Database.SetInitializer<BlogContext>(new DropCreateDatabaseAlways<BlogContext>());
using (var context = new BlogContext())
{
context.Database.Initialize(force: true);
}
}
Създайте нов контролер, наречен DatabaseController с две действия.
ВДостъп действие изтривате DB и пренасочвате към Пресъздаден действие, откъдето създавате DB, тъй като преди това е била изтрита.
namespace DeleteDBOnEveryRequest.Controllers
{
public class DatabaseController : Controller
{
public ActionResult Access()
{
using (var context = new BlogContext())
{
context.Database.Delete();
}
return RedirectToAction("Recreated");
}
public ActionResult Recreated()
{
using (var context = new BlogContext())
{
context.Database.Initialize(force: true);
}
return View();
}
}
}
Това ли искахте?