Entity Framework Core 总结
.NET Core CLI
此种方法对于 ASP.NET Core 也可以使用,其实当执行命令 dotnet ef migrations 时,会启动所在程序集(Program.cs),和正常启动ASP.NET Core 一样,所以会依赖注入 MyDbContext等
dotnet ef migrations add InitialCreate 创建描述表结构的代码文件
EF Core 有两个工具集
如果有上下文的数据库,则 EnsureCreated 方法不执行任何操作。 如果没有数据库,则它将创建数据库和架构。 EnsureCreated 启用以下工作流来处理数据模型更改:
删除数据库。 任何现有数据丢失。
更改数据模型。 例如,添加 EmailAddress 字段。
运行应用。
EnsureCreated 创建具有新架构的数据库。
在无需保存数据的情况下,当架构快速发展时,此工作流在早期开发过程中表现良好。 如果需要保存已输入数据库的数据,情况就有所不同了。 如果是这种情况,请使用迁移。
Q&A
Q: EF Core 创建数据库 报错: 'Method 'Create' in type 'MySql.Data.EntityFrameworkCore.Query.Internal.My......
A: 降低设计器版本到 3.x
Q:
A: WebApi.Startup.ConfigureServices
即, dotnet ef 的 默认 Migration 位于 DbContext 所在 Assembly,需要手动设置 MigrationsAssembly
WebApi 即 AssemblyName 可用下方代码获取
Q: 当多个 DbContext.Database.EnsureCreated() 时,只有第一个有效?
A: 是的,因为 EnsureCreated() 保证数据库被创建(存在),当第一个执行后,就会有数据库、表,
所以,当后面的 EnsureCreated() 执行时,由于已经存在数据库,所以不做任何操作
这个时候,只有对后面的调用 Migrate(),例如下方:
当然,也可以全部采用 Migrate():
注意:Migrate() 必须先生成 Migrations 代码文件,可使用 .NET CLI 生成:
补充
参考
感谢帮助!
入门 - EF Core | Microsoft Docs
1 | # 全局安装 EF Core 工具 |



-
.NET Core 命令行接口 (CLI) 工具可用于 Windows、Linux 或 macOS。 这些命令以 dotnet ef 开头。
包管理器控制台 (PMC) 工具在 Windows 上的 Visual Studio 中运行。 这些命令以动词开头,例如 Add-Migration、Update-Database。
创建数据库
Program.cs1 | using ContosoUniversity.Data; |
设定数据库种子
Data/DbInitializer.cs1 | using ContosoUniversity.Data; |
1 | <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.7"> |
1 | dotnet ef migrations add InitialCreate |
1 | Your target project 'WebApi' doesn't match your migrations assembly 'Repositories'. Either change your target project or change your migrations assembly. |
1 | services.AddDbContext<RemDbContext>(options => |
1 | string migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name; |
1 | this._applicationDbContext.Database.EnsureCreated(); |
1 | this._applicationDbContext.Database.Migrate(); |
1 | dotnet ef migrations add InitialAspNetCoreIdentityDbMigration -c ApplicationDbContext -o Migrations/AspNetCoreIdentityDb |