EF CodeFirst 数据库初始化策略
程序员文章站
2022-06-30 21:43:19
最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点。下面简单列一下目录 1.1 目录 1. 数据库初始化策略和数据迁移Migration的简单介绍 3. 配置一对一关系 4. 配置一对多关系 5. 配置多对多关系 6. 开发环境配置Mig ......
最近用EF做了几个小东西,了解简单使用后有了深入研究的兴趣,所以想系统的研究一下EF CodeFist的几个要点。下面简单列一下目录
1.1 目录
- 数据库初始化策略和数据迁移Migration的简单介绍
- 配置一对一关系
- 配置一对多关系
- 配置多对多关系
- 开发环境配置Migration最佳实践和生产环境配置Migration最佳实践
2.1 数据库初始化策略
在**http://www.entityframeworktutorial.net**这个网站中,我找到相关数据库初始化的策略
2.1.1有四种不同的数据库初始化策略:
- CreateDatabaseIfNotExists:这是默认的初始化程序。顾名思义,如果每个配置都不存在,它将创建数据库。但是,如果更改模型类,然后使用此初始化器运行应用程序,则会引发异常。
- DropCreateDatabaseIfModelChanges:如果您的模型类(实体类)已更改,则此初始化程序将删除现有数据库并创建新数据库。所以,当模型类更改时,您不必担心维护数据库模式。
- DropCreateDatabaseAlways:顾名思义,这个初始化器每次运行应用程序时都会丢弃一个现有的数据库,而不管你的模型类是否已经改变。当您每次运行应用程序时都需要新的数据库时,例如在开发应用程序时,这会很有用。
- 自定义数据库初始化程序:如果上述内容不满足您的要求,或者您想要使用上述初始化程序初始化数据库,您也可以创建自己的自定义初始化程序。
还有一种在列表中没有体现,就是MigrateDatabaseToLatestVersion ,在配置自动化迁移(Automated Migration)中会使用。
如果要取消数据库初始化策略,代码为:
Database.SetInitializer
2.1.2定义数据库初始化程序的示例代码如下所示:
public class SchoolDBInitializer : CreateDatabaseIfNotExists<SchoolDBContext> { protected override void Seed(SchoolDBContext context) { base.Seed(context); } }
注意其实是有继承关系的。
按照官方的说法:This separates the database initialization code from a context class.--这将数据库初始化的代码从context中分离出来
2.1.3 在配置文件中设置数据库初始化策略
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="DatabaseInitializerForType SchoolDataLayer.SchoolDBContext, SchoolDataLayer" value="SchoolDataLayer.SchoolDBInitializer, SchoolDataLayer" /> </appSettings> </configuration>
key的结构为 DatabaseInitializerForType{namespace}.{className},value 同理。
如果要配置取消数据库初始化策略,value=“Disabled” 即可。
下一篇: 机器人解魔方背后的人工智能
推荐阅读
-
使用EF CodeFirst连接MySql数据库
-
5.翻译系列:EF 6中数据库的初始化(EF 6 Code-First 系列)
-
MVC+EF6-CodeFirst 连接MySQL并创建数据库和表_Demo
-
Winform--数据库链接(EF CodeFirst)
-
EF CodeFirst使用Nuget更新数据库
-
EF CodeFirst 数据库初始化策略
-
EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之十数据库基础方法的封装
-
使用EF CodeFirst连接MySql数据库
-
5.翻译系列:EF 6中数据库的初始化(EF 6 Code-First 系列)