zoukankan      html  css  js  c++  java
  • 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以上的版本

    世界再大也有尽头!
  • 相关阅读:
    无限维
    黎曼流形
    why we need virtual key word
    TOJ 4119 Split Equally
    TOJ 4003 Next Permutation
    TOJ 4002 Palindrome Generator
    TOJ 2749 Absent Substrings
    TOJ 2641 Gene
    TOJ 2861 Octal Fractions
    TOJ 4394 Rebuild Road
  • 原文地址:https://www.cnblogs.com/shijiehaiyang/p/14721155.html
Copyright © 2011-2022 走看看