当你开发一个新的应用程序的时候,你的模型频繁的变化,而每一次的数据模型的改变,将使它与数据库不同步。你通过配置EF Core,使得数据库不存在时创建数据库。每一次改变数据模型(增删改 实体类或者改变DbContextClass),可以删除数据库然后重新创建一个与数据模型相匹配的数据库,然后填充测试数据。
这种保持数据模型与数据库同步的方法能够工作得很好,然后却不适用于将应用程序发布到产品中的阶段。当应用程序在真实的产品的时候,通常产品中包含有你需要保留的数据,在模型改变的时候(比如增加一个新列),你不希望丢失任何数据。EF Core 迁移功能能够解决这个问题,它能使EF更新数据库的结构而不用重新创建一个新的数据库。
为了能够使用迁移,你可以使用 Package Manager Console(PMC)或者command-line interface(CLI 命令行)。
用于CLI的EF工具 是在 Microsoft.EnrityFrameworkCore.Tools工具包中提供,对于 vs 15.7的版本,已经默认添加到了MVC模板中的 Microsoft.AspNetCore.App 包中。不用像官方教程介绍的,需要手工添加。
<PackageReference Include="Microsoft.AspNetCore.App" />
更改连接字符串
更改appsettings.josn文件中数据库连接字符串中的数据库名称为以前未使用的过名称。这样的改变使项目能使用 first migration 创建一个新的数据库。这并不是一个开始使用迁移必需的操作,但你会看到这是一个好主意。
另外一个方法是从SSOX(SQL Server Object Exporer SQL对象资源管理器)或CLI中删除数据库。
删除数据库的CLI命令是:dotnet ef database drop
创建初始化迁移
在解决方案管理器中,右键 项目文件夹----在弹出的菜单中选择 在文件资源管理器 中打开--------在地址栏输入cmd.
在控制台窗口中输入:dotnet ef migrations add InitialCreate
EF产生的代码会从头开始创建数据库。
会在解决方案管理器中 建立一个Migrations 文件夹,在其中,有一个同名加时间戳的cs文件。Up方法创建与数据模型实体集对应的数据库表格,down方法删除它们。
如果你创建初始化迁移的时候,数据库已经存在。创建数据库的代码依然会生成但是它不会运行,因为数据库已经与数据模型相匹配。当你发布一个应用到另外一个环境的时候,数据库不存在,此代码将会创建数据库,所以,这是一个好的主意先来测试它。
数据模型快照(Data Model snashot)
迁移创建了现有数据库结构的快照。当你增加一个迁移,通过对比数据模型和快照文件,决定改变了什么。
删除迁移的控制台命令是 dotnet ef migrations remove ,会删除迁移和保证快照 被正确的重置。
应用迁移到数据库
应用迁移更新数据库的CLI:dotnet ef database update
数据库中的EFMigrationsHistory表 会跟踪哪些迁移被应用到数据库。
原文地址:https://www.cnblogs.com/liuyuanhao/articles/9442266.html
.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com