存储库中Database.SetInitializer <ArContext>(null)的用途是什么?

l--*_*''' 4 .net c# entity-framework visual-studio-2015

我正在使用实体框架,并在我的上下文中继承自DbContext.

public class MyContext : DbContext, IMyContext
{
    static MyContext()
    {
        Database.SetInitializer<MyContext>(null);
    }
    //other stuff
}
Run Code Online (Sandbox Code Playgroud)

这条线的目的是什么?

Database.SetInitializer<ArContext>(null)
Run Code Online (Sandbox Code Playgroud)

Sam*_*ath 14

您可以关闭应用程序的数据库初始化程序.在您不想丢失现有数据的生产环境中.在这种情况下,您可以关闭初始化程序,如下所示.

 public MyContext()
    {
        Database.SetInitializer<MyContext>(null);//Disable initializer
    }
Run Code Online (Sandbox Code Playgroud)

有四种不同的数据库初始化策略:

  1. CreateDatabaseIfNotExists:这是默认的初始化程序.顾名思义,如果根据配置不存在,它将创建数据库.但是,如果更改模型类,然后使用此初始化程序运行应用程序,则会引发异常.
  2. DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并创建新数据库.因此,当模型类发生更改时,您不必担心维护数据库模式.
  3. DropCreateDatabaseAlways:顾名思义,无论您的模型类是否已更改,此初始化程序每次运行应用程序时都会删除现有数据库.当您在每次运行应用程序时需要新数据库时,这将非常有用,就像您在开发应用程序时一样.
  4. 自定义数据库初始化程序:您还可以创建自己的自定义初始化程序,如果上述任何一项不满足您的要求,或者您想要使用上述初始化程序执行其他初始化数据库的过程.

参考:数据库初始化策略