• EF Core使用Scaffold-DbContext从数据库生成模型


    最近两个月将12年开发的果蔬行业ERP升级到.NET Core,表结构变化比较大,迁移数据比较麻烦,所以写一个迁移程序来解决。为了减少代码量,决定用EF Core。EF Core中提供了一个命令Scaffold-DbContext,可以从数据库表生成模型类。

    使用Scaffold-DbContext命令需要项目中安装 Microsoft.EntityFrameworkCore.Design 和 Microsoft.EntityFrameworkCore.SqlServer 包,如果是MySQL的话则安装 Pomelo.EntityFrameworkCore.MySql

    然后就可以在 程序包管理器控制台 中运行 Scaffold-DbContext 命令了。

    Scaffold-DbContext

    执行 get-help Scaffold-DbContext 可以查看帮助,会输出一下信息

    名称
        Scaffold-DbContext
        
    摘要
        Scaffolds a DbContext and entity types for a database.
        
        
    语法
        Scaffold-DbContext [-Connection] <String> [-Provider] <String> [-OutputDir <String>] [-ContextDir <String>] [-Context <String>] [-Schemas <String[]>] [-Tables <String[]>] [-DataAnnotations] [-UseDatabaseNames] [-Force] [-Project <String>] [-StartupProject <String>] [<CommonParameters>]
        
        
    说明
        Scaffolds a DbContext and entity types for a database.
        
    
    相关链接
        about_EntityFrameworkCore 
    
    备注
        若要查看示例,请键入: "get-help Scaffold-DbContext -examples".
        有关详细信息,请键入: "get-help Scaffold-DbContext -detailed".
        若要获取技术信息,请键入: "get-help Scaffold-DbContext -full".
        有关在线帮助,请键入: "get-help Scaffold-DbContext -online"
    

      

    参数

    • -Connection 数据库连接字符串,必须指定,不同数据库不一样
    • -Provider 数据库的提供器
    • -Project 指定将代码生成到哪个项目下
    • -OutputDir 生成的代码放在项目的哪个目录下
    • -Context 上下文名称
    • -Force 强制重写
    • -StartProject 启动项目

    Provider常用的有

    • SQL Server Microsoft.EntityFrameworkCore.SqlServer
    • MySQL Pomelo.EntityFrameworkCore.MySql
    • SQLite Microsoft.EntityFrameworkCore.Sqlite

    示例代码

    Scaffold-DbContext 
    -Connection "server=.;uid=user;pwd=pwd;database=databse;" 
    -Provider Microsoft.EntityFrameworkCore.SqlServer 
    -OutputDir Models 
    -Context MyDbConetxt 
    -Project xx
    

      

    我程序中使用的是MySQL,Provider用的是 Pomelo.EntityFrameworkCore.MySql ,使用过程中遇到下面两个问题,同时给出解决办法。

    1. 主键使用的是Guid类型,表中存的类型为Char(36),这样生成的代码中为string类型的,解决办法是在数据库连接字符串中加上GuidFormat=Char36
    2. 表中如果使用的是bit类型,生成的代码中则是ulong类型的,如果想使用bool类型,则需要在数据库连接字符串中加上 TreatTinyAsBoolean=false

    同时要注意的是, Pomelo.EntityFrameworkCore.MySql 要使用3.0以上的版本

    世界再大也有尽头!
  • 相关阅读:
    Java学习笔记-函数
    Java学习笔记-数组
    Git 常用命令速查表
    $.fn与$.fx什么意思; $.extend与$.fn.extend用法区别; $(function(){})和(function(){})(jQuery)
    offsetWidth的bug
    jQuery对象和DOM对象转换,解决jQuery对象不能使用js方法的问题
    1
    $().ready()与window.onload的不同
    offsetHeight在不同的浏览器下取值不同
    getElementsByName兼容ie 但并不是兼容ie下的所有标签
  • 原文地址:https://www.cnblogs.com/shijiehaiyang/p/14721155.html
Copyright © 2020-2023  润新知