Database.SetInitializer(null)在存储库中的目的

本文关键字:存储 null SetInitializer ArContext Database | 更新日期: 2023-09-27 18:08:59

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

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

这一行的目的是什么?

Database.SetInitializer<ArContext>(null)

Database.SetInitializer<ArContext>(null)在存储库中的目的

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

 public MyContext()
    {
        Database.SetInitializer<MyContext>(null);//Disable initializer
    }
有四种不同的数据库初始化策略:
  1. CreateDatabaseIfNotExists:这是默认的初始化器。作为名字建议,如果数据库不存在,它将创建数据库配置。但是,如果您更改模型类,然后运行如果应用程序有这个初始化项,那么它将抛出例外。
  2. DropCreateDatabaseIfModelChanges:这个初始化器删除一个现有的数据库和创建一个新的数据库,如果你的模型类(实体)类)已经改变。所以你不用担心当你的模型类改变时,维护你的数据库模式。
  3. DropCreateDatabaseAlways:顾名思义,这个初始化器每次运行应用程序时都会删除一个现有数据库,不管你的模型类是否已经改变。这将是有用的,当您需要新的数据库时,每次运行
  4. 自定义DB初始化器:您也可以创建自己的自定义初始化器,如果上述任何一个不能满足您的要求或者你想做一些其他的进程来初始化数据库

参考:数据库初始化策略

实体框架代码优先的默认数据库初始化器是CreateDatabaseIfNotExists。顾名思义,如果数据库不存在,它将创建它。

这个行为在开发过程中是好的,但是当你进入生产环境时,你可能不想自动创建你的数据库。

如果你想禁用初始化器,你可以使用你所展示的行,所以现在你可以完全控制数据库将如何创建和发展。

其他初始化:

DropCreateDatabaseIfModelChanges.
DropCreateDatabaseAlways
Custom DB Initializer