.Net Core中使用EFCore生成反向工程

 更新时间:2022年06月14日 14:48:13   作者:springsnow  
这篇文章介绍了.Net Core中使用EFCore生成反向工程的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、简要步骤

1、第一步

安装以下程序包

  • 安装Entity FrameWork Core SqlServer 3.1
  • 安装Entity FrameWork Core Tools 3.1
  • 安装Entity FrameWork Core Design 3.1

2、第二步

选择默认项目为放Model的项目,在程序包管理控制台 输入:

Scaffold-DbContext '数据库连接字符串' Microsoft.EntityFrameworkCore.SqlServer -o Model -v

  • -o :表示输出到xxx   Model是生成文件以后所在的文件夹的名字,也可以用''代替会直接生成到项目的根目录。
  • -v: 表示显示错误信息
  • -Force :更新表
  • -Tables 表名 :只操作某张表
  • -Context :Context类名

示例:自动生成MainDB的Context类和UserInfo实体类。

Scaffold-DbContext 'Data Source=.;Initial Catalog=MyDB;User ID=sa;Password=sa123' Microsoft.EntityFrameworkCore.SqlServer -o '' -Tables UserInfo -Force -Context MainDB -v

提示:微软官网提示 Sql Server版本必须在2012以上。

 二、详细解释

  • 1.反向工程是实体类型类和一个基于数据库架构的 DbContext 类的基架的过程 
  • 2.Scaffold-DbContext(数据库上下文脚手架) 

使用Scaffold-DbContext(数据库上下文脚手架)指令生成models和context 

  • 3.脚手架: 

编译器(脚手架)根据程序员制定的规则收成相应的代码,操作数据库(CRUD) 

  • 4.语法:

Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-Context <String>] 
[-Schemas <String>] [-Tables <String>] [-DataAnnotations] [-Force] [-Project <String>] 
[-StartupProject <String>] [-Environment <String>] [<CommonParameters>]

  • 5.参数说明: 

[-Connection] <String>:数据库连接字符串,将使用此连接字符串来读取数据库架构。 
[-Provider] <String>:第二个参数是提供程序名称。提供程序名称通常是与提供程序的 NuGet 包名称相同,例如:Pomelo.EntityFrameworkCore.MySql、Microsoft.EntityFrameworkCore.SqlServer 
[-OutputDir <String>]:实体类文件存放的目录 
[-Context <String>]:创建到一个单独的目录从实体类型类的基架的 DbContext 类。 
[-Schemas <String>]:用于包含在架构中的每个表 
[-Tables <String>]:指定表,例如:Scaffold-DbContext ... -Tables Artist, Album 
[-DataAnnotations]:保留名称,使用原始数据库名称,仍将修复无效的.NET 标识符和合成的名称,如导航属性仍将遵循.NET 命名约定 
[-Force]:更新模型 
[-Project <String>]:已搭建基架的 DbContext 类名称将用作后缀的数据库的名称上下文默认情况下。 若要指定一个不同,使用-Context 
[-StartupProject <String>]:指定要使用的启动项目。如果省略,则使用解决方案的启动项目 
[-Environment <String>] 
[<CommonParameters>] 

  • 6.工作原理

反向工程开始时读取数据库架构。 它将读取有关表、 列、 约束和索引的信息。 
接下来,它使用的架构信息创建 EF Core 模型。 使用表来创建实体类型;使用列来创建属性;和外键用于创建关系。 
最后,该模型用于生成代码。 相应的实体类型的类、 Fluent API 和数据批注已搭建基架以重新创建相同的模型从您的应用程序中。 

  • 7.无效情况 

有关的信息继承层次结构,固有类型,并表拆分数据库架构中不存在 
些列类型可能不支持通过 EF Core 提供程序 
表没有主键是当前不实施反向工程。 

  • 8.安装程序集 

--MySQL版本: 
    MySql.Data.EntityFrameworkCore 
    Pomelo.EntityFrameworkCore.MySql 
    Microsoft.EntityFrameworkCore.Tools 
    Microsoft.VisualStudio.Web.CodeGeneration.Design 
--SQLService版本: 
    Microsoft.EntityFrameworkCore 
    Microsoft.EntityFrameworkCore.SqlServer 
    Microsoft.EntityFrameworkCore.Tools 
    Microsoft.VisualStudio.Web.CodeGeneration.Design 

  • 9.在程序包包管理器控制台 中执行以下语句生成 实体类 

--MySQL版本: 
第一次生成实体类: 
Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models 
更新实体类:

Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Pomelo.EntityFrameworkCore.MySql -OutputDir Models -Force

--SQLService版本: 
第一次生成实体: 
Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models 
更新实体类: 
Scaffold-DbContext "Server=127.0.0.1;port=3306;Database=db; User=root;Password=root;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force

注意:

在EF Core 3.0及以上Scaffold-DbContext指令已经可以自动映射数据库中的视图为实体。查询类型表示可从数据库读取但无法更新的数据,它已重命名为无键实体类型。 
由于它们非常适用于映射多数场景中的数据库视图,当执行数据库视图反向工程时,EF Core 现在将自动创建无键实体类型。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Names>(entity =>
    {
        entity.HasNoKey();
        entity.ToView("Names");
    });
    modelBuilder.Entity<Things>(entity =>
    {
        entity.HasNoKey();
    });
}

到此这篇关于.Net Core中使用EFCore生成反向工程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • .net开发中几个重要的认识误区小结

    .net开发中几个重要的认识误区小结

    .net如今已经很流行,成为赶时髦的程序员的首选。但是,大量刚刚接触.net的程序员的确存在一定的认识误区,这里先介绍一部分。
    2010-04-04
  • ASP.NET 2.0,C#----图像特效处理

    ASP.NET 2.0,C#----图像特效处理

    ASP.NET 2.0,C#----图像特效处理...
    2007-04-04
  • ASP.NET Core利用Jaeger实现分布式追踪详解

    ASP.NET Core利用Jaeger实现分布式追踪详解

    这篇文章主要给大家介绍了关于ASP.NET Core利用Jaeger实现分布式追踪的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-04-04
  • 通过HttpClient 调用ASP.NET Web API示例

    通过HttpClient 调用ASP.NET Web API示例

    本篇文章主要介绍了通过HttpClient 调用ASP.NET Web API示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Asp.Net中文本换行

    Asp.Net中文本换行

    Asp.Net中文本换行...
    2007-04-04
  • asp.net微信开发(高级群发文本)

    asp.net微信开发(高级群发文本)

    这篇文章主要介绍了asp.net微信开发中有关高级群发文本的相关内容,需要的朋友可以参考下
    2015-11-11
  • .NET Core GC压缩(compact_phase)底层原理解析

    .NET Core GC压缩(compact_phase)底层原理解析

    GC的最后一个步骤,分为清除和压缩两种情况,清除操作将不可到达对象转换为Free,而压缩操作涉及复制对象并移动到新位置,更新所有引用,并重新划分代边界,本文介绍.NET Core GC压缩原理解析,感兴趣的朋友一起看看吧
    2025-01-01
  • asp.net 数据访问层 存储过程分页语句

    asp.net 数据访问层 存储过程分页语句

    在asp.net 网页中如果在业务逻辑层分页在使用PagedDataSource对象,但如果数据记录过多,使用它会严重的损害应用程序的性能.
    2009-12-12
  • .NET MVC中ViewData,ViewBag和TempData的区别浅析

    .NET MVC中ViewData,ViewBag和TempData的区别浅析

    这篇文章主要介绍了.NET MVC中ViewData,ViewBag和TempData的区别,分析了ViewData,ViewBag和TempData在赋值、功能特性等方面的区别于用法,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01
  • asp.net中session的原理及应用详解

    asp.net中session的原理及应用详解

    Session是一种Web会话中的常用状态之一,Session提供了一种把信息保存在服务器内存中的方式。他能储存任何数据类型,包含自定义对象,本文将详细介绍asp.net中session的原理及应用,需要的朋友可以参考下
    2012-11-11

最新评论