EF Core (EntityFramework Core)是实体关系映射(O/RM)数据库访问框架。这个模式的好处就是让开发人员能够用对象模型来操做数据库,这是一种对开发人员较为友好的方式。mysql
非对象模型操做数据库,就要直接用sql语言来作大量的CURD操做(Creat 建立;update 更新;read 读取;delete 删除)。这些操做编写繁琐又容易出错,目的却只是为了操做数据库,而不是业务。而对象模型(O/RM)是基于业务,使用的就是自身的程序语言,至关于把操做数据库的细节给封装起来,让开发人员专心对付业务。可是这个模式也不是天衣无缝,若是业务的重心,或者瓶颈就在于操做数据库,就是要精细化的控制数据库,那么封装就是多余的,即便再好的封装。程序员
如下三种“约定”方式会产生模型(Model):sql
1、Dbset<模型a>shell
2、class 模型a{数据库
list<模型b>;api
}架构
3、modelBuilder.Entity<模型c>();app
[NotMapped] 注释特性能阻止产生模型映射到数据库。框架
Fluent API(流api)能够阻止映射:modelBuilder.Ignore<被阻止的类型>()。ide
三种模型控制的优先级是 Fluent API > 注释特性 > 约定
默认拥有get;set;的公共属性会被映射。
属性名为ID或类型名Id将被映射为主键。
[Key] 注释特性设置为键。
modelBuilder.Entity<模型>().Haskey(c => c.属性被设置为键),这方法还能够设置多个键。
[Required] 注释特性指定属性必须在提交数据库时提供值。
modelBuilder.Entity<模型>().Property(b => b.必须属性).IsRequired()。
[MaxLength(500)]
modelBuilder.Entity<模型>().Property(b => b.属性).HasMaxLength(500);
context.Entry(模型).Property(“隐藏属性“).CurrentValue = DateTime.Now;
主体实体(Principal entity)
依赖实体(Dependent entity) :相对而言
外键(Foreign key):存储关联实体的主体键的属性
主体键(Principal key):主键或备用键
导航属性 Navigation property(集合导航属性,引用导航属性,反向导航属性):用关联实体类型定义的属性
[ForeignKey] 注释特性用在导航属性上来指定外键
[InversePropery] 注释特性指定反向导航属性
主体实体包含导航属性指向依赖实体;依赖实体包含外键和反向导航属性。
自动生成外键的隐藏属性
只须要单个导航属性,就能够确认关系
[Table(“表名”)] 表映射
[Column(“列名’)] 列映射
.TOList() 跟踪(变动)查询。至关于CURD中的R
.AsNoTracking().ToList() 不跟踪(变动)查询,速度更快。
默认状况下,若是不返回实体(而只是返回实体的一部分属性)将不实施跟踪。
.FromSql(“SQL语句”).ToList() 用原始SQL执行查询。
.SaveChanges() 保存(跟踪的)全部变动。
.Add() 至关于CURD中的C
修改属性 至关于U
.Remove() 至关于D
能够针对每一条记录的变动自动跟踪修改的模式(CUD),而后执行相关的CURD操做,程序员不须要记住每一次变动,当心翼翼地编写sql语句,这是O/RM的魅力所在。
Microsoft.EntityFrameworkCore.SqlServer ms sql server
Microsoft.EntityFrameworkCore.Sqlite sqlite
MySql.Data.EntityFrameworkCore mysql
EntityFrameworkCore.Jet access
Npgsql.EntityFrameworkCore.PostgreSQL postgresql
为了保持EF Core 模型和数据库架构同步,有两个方式:
迁移(Migrations):以EF Core model为源采起的同步方法
反向工程(Reverse Engineering):以数据库架构为源,同步到ef core模型
产生迁移准备文件:
PowerShell:
Add-Migration InitialCreate
Console:
dotnet ef migrations add InitialCreate
更新到数据库架构:
powershell: Update-Database
console: dotnet ef database update
添加新的迁移:
powershell: Add-Migration 新迁移项目
console: dotnet ef migrations add 新迁移项目
删除迁移:
powershell: Remove-Migration
console: dotnet ef migrations remove
还原迁移:
powershell: Update-Database 迁移项目
console: dotnet ef database update 迁移项目
程序内方法:
myDbContex.Database.Migrate() 执行迁移。
EnsureCreated() 将会致使迁移失败。
保证模型和数据库之间的同步,是很关键的基础工做。在这个基础之上,对模型的操做才有意义,简便性才体现出来。
开发过程当中,几乎不可能不修改模型,没法一劳永逸,因此要掌握好同步工具。
Scaffold-DbContext –Connection<string> –Provider <String> –OutputDir <string>