初始化器当您需要访问数据库时执行,因此如果您想在应用程序启动时创建数据库,请使用以下任意命令:
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 http://msdn.microsoft.com/en-us/library/system.data.entity.database.initialize(v=vs.103).aspx
如果不存在则创建数据库IDatabaseInitializer 的实现,仅当数据库不存在时,才会重新创建数据库并可选地为数据库重新播种数据。要为数据库设定种子,请创建一个派生类并重写 Seed 方法。
Database.SetInitializer<MyContext>(new CreateDatabaseIfNotExists<MyContext>());
http://msdn.microsoft.com/en-us/library/gg679221(v=vs.103).aspx http://msdn.microsoft.com/en-us/library/gg679221(v=vs.103).aspx
如果模型更改则删除创建数据库IDatabaseInitializer 的实现,仅当模型自创建数据库以来发生更改时,才会删除、重新创建数据库,并可选地使用数据重新播种数据库。这是通过在创建存储模型时将其哈希值写入数据库,然后将该哈希值与当前模型生成的哈希值进行比较来实现的。要为数据库设定种子,请创建一个派生类并重写 Seed 方法。
初始化策略可以选择检查数据库
存在,创建一个新数据库,并用数据播种该数据库。这
默认策略是一个实例
如果不存在则创建数据库。
Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
请注意,这假设您甚至有权删除数据库。
http://msdn.microsoft.com/en-us/library/gg679604(v=vs.103).aspx http://msdn.microsoft.com/en-us/library/gg679604(v=vs.103).aspx
始终删除创建数据库
IDatabaseInitializer 的实现,当第一次在应用程序域中使用上下文时,它始终会重新创建数据库,并可选择重新为数据库播种数据。要为数据库设定种子,请创建一个派生类并重写 Seed 方法。
Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
http://msdn.microsoft.com/en-us/library/gg679506(v=vs.103).aspx http://msdn.microsoft.com/en-us/library/gg679506(v=vs.103).aspx
我建议你看看迁移如果您想跟踪,请将您对数据库所做的更改恢复到之前的状态http://msdn.microsoft.com/hr-hr/data/jj591621 http://msdn.microsoft.com/hr-hr/data/jj591621 .
UPDATE
context.Database.Initialize(true);
如果参数force设置为true,则运行初始化程序
无论之前是否运行过。这可以是
如果在应用程序运行时删除数据库并且需要删除数据库,则很有用
被重新初始化。
对于 MVC 应用程序,将一个部分添加到Application_Start()
方法中的全局.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());
UPDATE 2
创建一个新的空 MVC4 应用程序,名为在每个请求上删除数据库。
将以下内容放入 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);
}
}
创建一个名为的新控制器数据库控制器有两个动作。
In the Access您删除数据库并重定向到的操作重新创建从您创建先前删除的数据库的位置执行操作。
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();
}
}
}
这是你想要的吗?