EF迁移的四种策略

发布时间:2021-12-18 20:39:40来源:本站阅读(595)

    EF可以根据项目中的模型自动创建数据库。Entity Framework数据库初始化有四种策略

    一、 每次运行都会创建新的数据库

    Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways< MyContext >());

    二、只有第一次运行才会创建新的数据库(默认的方式)

    Database.SetInitializer< MyContext  >(new CreateDatabaseIfNotExists< MyContext  >());

    三、 修改模型后再次运行会创建新的数据库
    Database.SetInitializer< MyContext  >(new DropCreateDatabaseIfModelChanges< MyContext  >());

    四、使用自己配置的数据库,请到:web.config中配置自己的连接字符串,注意连接字符串的名称应与上下文: MyContext  的名字一致。

    还有一种在列表中没有体现,就是MigrateDatabaseToLatestVersion ,在配置自动化迁移(Automated Migration)中会使用。

    如果要取消数据库初始化策略,代码为:

    Database.SetInitializer(null);


    定义数据库初始化程序的示例代码如下所示:

    public class MyInitializer :  CreateDatabaseIfNotExists<MyContext>
    {
    protected override void Seed(MyContext context)
    {
    base.Seed(context);
    }
    }

    在配置文件中设置数据库初始化策略,如下

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <appSettings>
    <add key="DatabaseInitializerForType SchoolDataLayer.SchoolDBContext, SchoolDataLayer"
    value="SchoolDataLayer.SchoolDBInitializer, SchoolDataLayer" />
    </appSettings>
    </configuration>


    EF的约定优先原则:

    EF会尽可能的使用约定而非配置,如果在程序运行时,不按照上述四方法配置具体的数据库连接方式,EF将按照约定创建一个连接,也就是根据模型关系创建一个数据库。

    EF创建新数据库的过程如下:

    首先EF将尝试连接SQLserverExpress的本地实例,并且查找与上下文: MyContext  名字相同的数据库,如果EF找不到这个数据库,EF则会根据约定创建一个数据库。

关键字code first ef

  • 头像
    coder

    了解了