.NET Core 学习笔记3——EF Core

EF Core (EntityFramework Core)是实体关系映射(O/RM)数据库访问框架。这个模式的好处就是让开发人员能够用对象模型来操做数据库,这是一种对开发人员较为友好的方式。mysql

O/RM牛逼在哪?

非对象模型操做数据库,就要直接用sql语言来作大量的CURD操做(Creat 建立;update 更新;read 读取;delete 删除)。这些操做编写繁琐又容易出错,目的却只是为了操做数据库,而不是业务。而对象模型(O/RM)是基于业务,使用的就是自身的程序语言,至关于把操做数据库的细节给封装起来,让开发人员专心对付业务。可是这个模式也不是天衣无缝,若是业务的重心,或者瓶颈就在于操做数据库,就是要精细化的控制数据库,那么封装就是多余的,即便再好的封装。程序员

1. 建立模型

如下三种“约定”方式会产生模型(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 > 注释特性 > 约定

1.1 模型内部数据

默认拥有get;set;的公共属性会被映射。

1.1.1 主键

属性名为ID或类型名Id将被映射为主键。

[Key] 注释特性设置为键。

modelBuilder.Entity<模型>().Haskey(c => c.属性被设置为键),这方法还能够设置多个键。

1.1.2 必须属性

[Required] 注释特性指定属性必须在提交数据库时提供值。

modelBuilder.Entity<模型>().Property(b => b.必须属性).IsRequired()。

1.1.2 数据长度

[MaxLength(500)]

modelBuilder.Entity<模型>().Property(b => b.属性).HasMaxLength(500);

1.1.3 隐藏属性

context.Entry(模型).Property(“隐藏属性“).CurrentValue =  DateTime.Now;

1.2 关系

主体实体(Principal entity)

依赖实体(Dependent entity) :相对而言

外键(Foreign key):存储关联实体的主体键的属性

主体键(Principal key):主键或备用键

导航属性 Navigation property(集合导航属性,引用导航属性,反向导航属性):用关联实体类型定义的属性

[ForeignKey] 注释特性用在导航属性上来指定外键

[InversePropery] 注释特性指定反向导航属性

1.2.1 彻底定义的关系

主体实体包含导航属性指向依赖实体;依赖实体包含外键和反向导航属性。

1.2.2 没有外键

自动生成外键的隐藏属性

1.2.3 单个导航属性

只须要单个导航属性,就能够确认关系

1.3 关系数据库建模

[Table(“表名”)] 表映射

[Column(“列名’)] 列映射

2. 查询数据

.TOList() 跟踪(变动)查询。至关于CURD中的R

.AsNoTracking().ToList() 不跟踪(变动)查询,速度更快。

默认状况下,若是不返回实体(而只是返回实体的一部分属性)将不实施跟踪。

.FromSql(“SQL语句”).ToList() 用原始SQL执行查询。

3. 保存数据

.SaveChanges() 保存(跟踪的)全部变动。

.Add()  至关于CURD中的C

修改属性  至关于U

.Remove()  至关于D

能够针对每一条记录的变动自动跟踪修改的模式(CUD),而后执行相关的CURD操做,程序员不须要记住每一次变动,当心翼翼地编写sql语句,这是O/RM的魅力所在。

4. 经常使用数据库

Microsoft.EntityFrameworkCore.SqlServer   ms sql server

Microsoft.EntityFrameworkCore.Sqlite sqlite

MySql.Data.EntityFrameworkCore mysql

EntityFrameworkCore.Jet access

Npgsql.EntityFrameworkCore.PostgreSQL postgresql

5. 管理数据库架构

为了保持EF Core 模型和数据库架构同步,有两个方式:

迁移(Migrations):以EF Core model为源采起的同步方法

反向工程(Reverse Engineering):以数据库架构为源,同步到ef core模型

5.1 迁移

产生迁移准备文件:

PowerShell:

Add-Migration InitialCreate

Console:

dotnet ef migrations add InitialCreate

image

更新到数据库架构:

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() 将会致使迁移失败。

保证模型和数据库之间的同步,是很关键的基础工做。在这个基础之上,对模型的操做才有意义,简便性才体现出来。

开发过程当中,几乎不可能不修改模型,没法一劳永逸,因此要掌握好同步工具。

5.2 反向工程

Scaffold-DbContext –Connection<string> –Provider <String> –OutputDir <string>

相关文章
相关标签/搜索