EF Core 5.0 DB First和CodeFirst实现
DB First是基于数据库架构生成DbContext及实体类型的过程。
1.安装工具
.NET Core CLI 命令:
dotnet tool install --global dotnet-ef dotnet add package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
2.安装数据库提供程序
.NET Core CLI 命令:
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 5.0.0-alpha.2
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2
3.生成DbContext、实体模型
.NET Core CLI 命令:
dotnet ef dbcontext scaffold "Server=localhost;Uid=root;Pwd=123456;Database=databaseName" Pomelo.EntityFrameworkCore.MySql
Scaffold-DbContext 'Server=localhost;Uid=root;Pwd=123456;Database=databaseName' Pomelo.EntityFrameworkCore.MySql
二、Code First
CodeFirst是基于DbContext及实体类型生成数据库架构的过程。
1.安装工具
.NET Core CLI 命令:
dotnet tool install --global dotnet-ef dotnet add package Microsoft.EntityFrameworkCore.Design
Install-Package Microsoft.EntityFrameworkCore.Tools
2.安装数据库提供程序
.NET Core CLI 命令:
dotnet add package Pomelo.EntityFrameworkCore.MySql --version 5.0.0-alpha.2
Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2
3.创建DbContext、实体模型
定义构成模型的上下文类和实体类:
using System.Collections.Generic; using Microsoft.EntityFrameworkCore; namespace EFGetStarted { public class BloggingContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlite("Data Source=blogging.db"); } public class Blog { public int BlogId { get; set; } public string Url { get; set; } public List<Post> Posts { get; } = new List<Post>(); } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }
4.创建数据库
.NET Core CLI 命令:
dotnet ef migrations add InitialCreate
dotnet ef database update
Add-Migration InitialCreate
Update-Database
5.更新数据库
在属性字段变更的情况下,更新数据库结构
.NET Core CLI 命令:
dotnet ef migrations remove
dotnet ef database update
Remove-Migration
Update-Database
三、参数说明
.NET Core CLI下dotnet ef dbcontext 参数说明:
选项 | Short | 说明 |
---|---|---|
--data-annotations |
-d |
使用属性可在可能) 的情况下配置模型 (。 如果省略此选项,则只使用 Fluent API。 |
--context |
-c |
DbContext 要生成的类的名称。 |
--context-dir |
要放入 DbContext 类文件的目录。 路径相对于项目目录。 命名空间是从文件夹名称派生的。 |
|
--context-namespace |
要用于生成的类的命名空间 DbContext 。 注意:重写 --namespace 。 在 EF Core 5.0 中添加。 |
|
--force |
-f |
覆盖现有文件。 |
--output-dir |
-o |
要在其中放置实体类文件的目录。 路径相对于项目目录。 |
--namespace |
-n |
要用于所有生成的类的命名空间。 默认值为从根命名空间和输出目录生成。 在 EF Core 5.0 中添加。 |
--schema ... |
要为其生成实体类型的表的架构。 若要指定多个架构,请重复上述操作 --schema 。 如果省略此选项,则包括所有架构。 |
|
--table ... |
-t |
要为其生成实体类型的表。 若要指定多个表,请对 -t 每个表重复或 --table 。 如果省略此选项,则包括所有表。 |
--use-database-names |
使用表和列的名称与数据库中显示的名称完全相同。 如果省略此选项,则更改数据库名称以更严格地符合 c # 名称样式约定。 | |
--no-onconfiguring |
禁止 OnConfiguring 在生成的类中生成方法 DbContext 。 在 EF Core 5.0 中添加。 |
|
--no-pluralize |
请勿使用复数化程序。 添加 EF Core 5.0 |
Visual Studio 下Scaffold-DbContext参数说明
为 DbContext
数据库的和实体类型生成代码。 为了使 Scaffold-DbContext
参数:
参数 | 说明 |
---|---|
-连接 <String> | 用于连接到数据库的连接字符串。 对于 ASP.NET Core 2.x 项目,值可以是 *name = * 。 在这种情况下,该名称来自为项目设置的配置源。 这是一个位置参数,并且是必需的。 |
-提供程序 <String> | 要使用的提供程序。 通常,这是 NuGet 包的名称,例如: Microsoft.EntityFrameworkCore.SqlServer 。 这是一个位置参数,并且是必需的。 |
-OutputDir <String> | 要在其中放置文件的目录。 路径相对于项目目录。 |
-ContextDir <String> | 要在其中放置文件的目录 DbContext 。 路径相对于项目目录。 |
-命名空间 <String> | 要用于所有生成的类的命名空间。 默认值为从根命名空间和输出目录生成。 在 EF Core 5.0 中添加。 |
-ContextNamespace <String> | 要用于生成的类的命名空间 DbContext 。 注意:重写 -Namespace 。 在 EF Core 5.0 中添加。 |
-上下文 <String> | DbContext 要生成的类的名称。 |
-架构 <String[]> | 要为其生成实体类型的表的架构。 如果省略此参数,则包括所有架构。 |
-表 <String[]> | 要为其生成实体类型的表。 如果省略此参数,则包括所有表。 |
-DataAnnotations | 使用属性可在可能) 的情况下配置模型 (。 如果省略此参数,则只使用 Fluent API。 |
-UseDatabaseNames | 使用表和列的名称与数据库中显示的名称完全相同。 如果省略此参数,则更改数据库名称以更严格地符合 c # 名称样式约定。 |
-Force | 覆盖现有文件。 |
-NoOnConfiguring | 不生成 DbContext.OnConfiguring 。 在 EF Core 5.0 中添加。 |
-NoPluralize |