zoukankan      html  css  js  c++  java
  • 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:UsersYJNO

    数据库文件
    数据库文件

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

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

  • 相关阅读:
    v$session,v$session_wait,v$session_wait_history,v$active_session_history
    ORACLE 12C PDB部分功能测试
    关于A基金和B基金的了解
    insert /*+ APPEND */
    使用ADRCI (ADR Command Interpreter) 工具查看Oracle alert警告日志
    Linux┊详解udev
    Cache Fusion
    ORACLE的临时表
    【转】k8s集群自定义clusterRole样例
    prometheus监控java项目(jvm等):k8s外、k8s内
  • 原文地址:https://www.cnblogs.com/HelloZyjS/p/12685793.html
Copyright © 2011-2022 走看看