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

我正在使用entity framework,并在我的上下文中inheritance自DbContext。

public class MyContext : DbContext, IMyContext { static MyContext() { Database.SetInitializer(null); } //other stuff } 

这条线的目的是什么?

 Database.SetInitializer(null) 

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

  public MyContext() { Database.SetInitializer(null);//Disable initializer } 

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

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

参考: 数据库初始化策略

Entity Framework Code First中的默认数据库初始值设定项是CreateDatabaseIfNotExists 。 正如其名称所示,如果数据库不存在,它将创建它。

这种行为在开发过程中很好,但是当你去生产时,你可能不想自动创建数据库。

如果要禁用初始化程序,则使用显示的行,现在您可以完全控制数据库的创建方式并及时发展。

其他初始化器:

 DropCreateDatabaseIfModelChanges. DropCreateDatabaseAlways Custom DB Initializer 

检查这一点了解更多。