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原理
EFCore原理

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.DataEFCore.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脚本.

命令执行成功
命令执行成功

成功生成了迁移相关的sql语句
成功生成了迁移相关的sql语句

在开发的时候,我们可以使用Upate-Database命令来直接生成数据库,如果我们想看执行的明细,我们可以在Update-Database 命令后面跟一个 -verbose参数,即Update-Database -verbose

命令执行成功
命令执行成功

此时生成的数据库文件在当前计算机的当前用户的目录下,我的电脑是
C:\Users\ZYJNO

数据库文件
数据库文件

我们通过数据库对象管理器,就可以看到我们所创建的数据库了.

数据库对象管理器
数据库对象管理器

posted @ 2020-04-12 15:52  HelloZyjS  阅读(157)  评论(0编辑  收藏  举报