001 Entity Framework Core 2.x P1
001 Entity Framework Core 2.x P1
博客园文章Id:12685793
EFCore 介绍
- 概述:
- Entity Framework Core 简介
- 创建Model
- 与数据库交互
- 关系数据
- 在
ASP.NET Core
中的应用
EFCore 是什么?
EFCore
是微软官方开发的一款ORM框架.
EFCore
相对于其他ORM的优势在于可以大大的提高开发人员的生产力,并且由于是微软自己的产品,所以和.Net Core
的结合也会非常的好,但是相应的, EFCore 的性能也会相对的要差于 .Net
世界的一些其它主流ORM框架,比如 Dapper,SqlSugar等.
为什么使用EFCore
- 生产力
- 支持很多数据库
- 可以使用Linq
- 注重领域[Domain],而不是数据库
EFCore 2.x支持的平台框架
- .Net Core 2.x
- .Net 4.6.1+
- UWP
- Xamarin 等
在项目中使用EFCore
创建以下解决方案
在当前解决方案中,目前有两个项目,EFCore.Data
和EFCore.Domain.Models
.
-
EFCore.Domain.Models 中主要用来编写表实体类.
- 此项目需要依赖包
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore
提供了,EFCore ORM 框架基本的核心功能
- 此项目需要依赖包
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.SqlServer
提供了,EFCore对SqlServer数据库操作的核心功能
- 此项目需要依赖包
-
EFCore.Data 中主要是用来构造与数据库表的映射关系,以及在此项目中构建
MyContext
类.- 此项目需要引用项目
EFCore.Domain.Models
- 此项目需要依赖包
Microsoft.EntityFrameworkcore.Tools
Microsoft.EntityFrameworkcore.Tools
提供了数据迁移的相关功能.
- 此项目需要引用项目
EF操作上下文类的封装
using EFCore.Domain.Models;
using Microsoft.EntityFrameworkCore;
namespace EFCore.Data
{
public class MyContext:DbContext
{
public DbSet<Province> Provinces { get; set; }
public DbSet<City> Cities { get; set; }
//在程序运行之后,EFCore会来执行OnConfiguring方法,进行一些初始化配置
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//在此处直接写连接字符串是用来写Demo的时候为了方便,但是在实际生产中,不应该在此处直接编写数据库的链接字符串
optionsBuilder.UseSqlServer("Server =(localdb)\\MSSQLLocalDB;Database=EFCoreDemo; Trusted_Connection=True");
}
}
}
编写City表实体类
namespace EFCore.Domain.Models
{
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public string AreaCode { get; set; }
public int ProvinceId{ get; set; }
public Province Province { get; set; }
}
}
编写Province实体类
using System.Collections.Generic;
namespace EFCore.Domain.Models
{
public class Province
{
public Province()
{
Cities = new List<City>();
}
public int Id { get; set; }
public string Name { get; set; }
public int Population { get; set; }
public List<City> Cities { get; set; }
}
}
安装EFCore
我们需要在Nuget包管理中搜索以下安装包即可.
Microsoft.EntityFrameworkCore
值得注意的是Microsoft.EntityFrameworkCore
只是提供了,基本的EFCore核心功能,如果我们需要操作具体的数据库,那么我们还需要安装操作指定的数据库的Providers开发包,下面我们以SqlServer数据库为例,所以我们需要再安装支持SqlServer的EFCore开发包,在Nuget中搜索以下安装包即可.
Microsoft.EntityFrameworkCore.SqlServer
查看本机SqlServer 实例的 cmd命令
Sqllocaldb info
EFCore 迁移
- 创建/删除 Domain Model
- 创建迁移文件
- 应用迁移到数据库,获取生成SQL脚本
迁移用的库
如果我们想要在Vs中依赖EFCore使用迁移命令,将Model代码映射到数据库中,我们还需要在Vs中安装一个依赖包.
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Tools 会依赖 Microsoft.EntityFrameworkCore.Desion
- Microsoft.EntityFrameworkCore.Tools :用来执行PowerShell命令
- Microsoft.EntityFrameworkCofe.Desion :是一个迁移引擎
迁移要求:
- 需要一个可执行的项目
- 必须在启动项目里
安装完成之后,我们就可以在Vs的包管理控制台中,输入迁移命令,将项目中的Model,迁移至数据库中,生成表,以及表数据,在包管理控制器中,实际上我们可以执行PowerShell的相关命令.
我们需要选择DbContext所在的项目.
我们现在可以在包管理控制台中,查看EFCore相关的命令,我们数据一下命令来进行查看.
get-help entityframeworkcore
命令解释:
Add-Migration 如果创建了Model,或者已创建的Model发生了改变,那么此命令执行就会生成一些sql语句,这些sql语句执行之后,那么数据库中表结果,就会根据model,进行匹配,并且一同演进. (只是生成sql语句,这个sql语句并没有执行.)
Update-Database 等于是在Add-Migration命令的基础上,将生成好的sql执行到数据库中,达到数据库和Model同步的目的.
现在我们进行迁移,此处需要注意的是在进行迁移之前,我们需要将DbContext所在的项目设置为启动项,否则在之前Add-Migration命令的时候会报错,如下图:
我们修改启动项之后再执行Add-Migration命令:
这个时候,在EFCore.Data
项目中会自动创建一个Migrations
文件夹,并生成,此次迁移要使用到的变化(类似于一个快照)即,迁移文件.
我们可以根据此次生成的迁移文件,根据 Script-Migration 命令 生成需要迁移的sql脚本.
在开发的时候,我们可以使用Upate-Database命令来直接生成数据库,如果我们想看执行的明细,我们可以在Update-Database 命令后面跟一个 -verbose参数,即Update-Database -verbose
此时生成的数据库文件在当前计算机的当前用户的目录下,我的电脑是
C:\Users\ZYJNO
我们通过数据库对象管理器,就可以看到我们所创建的数据库了.
- 上述文档参考自
EFCore 2.x 入门 p1
源码下载