【问题标题】:EntityFramework Core 3.1 + with MySql or Pomelo rename table to use DBFirstEntity Framework Core 3.1 + 使用 MySql 或 Pomelo 重命名表以使用 DB First
【发布时间】:2021-06-06 09:33:28
【问题描述】:

我已经完成了两个测试项目,一个使用 MySQL.EntityFramworkCore,另一个使用 Pomelo.EntityFrameworkCore,当我从数据库中获取模型时,这两个项目都发生了同样的事情。

1.- Scaffold-DbContext 'server = x.x.x.x.x; user = xxxx; password = xxxx; database = name;' MySql.EntityFrameworkCore -OutputDir Models -f
2.- Scaffold-DbContext 'server = x.x.x.x.x; user = xxxx; password = xxxx; database = name;' Pomelo.EntityFrameworkCore.MySql -OutputDir Models -f

我的数据库中有如下表: 品牌汽车 并在执行 dbFirst 进程时。 它把我的名字改成了 BrandCars。

在SQLServer中存在参数-UseDatabaseNames,但是在mysql中我没有找到

在连接器选项中我没有找到这个选项。 https://mysqlconnector.net/connection-options/

是否有可能在执行 dbFirst 时强制您不更改​​数据库表的名称?

我的连接器版本如下:

-Pomelo 项目

Microsoft.EntityFrameworkCore.Tools 3.1.12

Pomelo.EntityFrameworkCore.MySql 3.2.4

Pomelo.EntityFrameworkCore.MySql.Design 1.1.2

-对于MySQL项目

Microsoft.EntityFrameworkCore.Design 5.0.3

Microsoft.EntityFrameworkCore.Tools 5.0.3

MySql.EntityFrameworkCore 5.0.0

【问题讨论】:

    标签: mysql entity-framework-core ef-core-3.1 pomelo-entityframeworkcore-mysql db-first


    【解决方案1】:

    在其5.0.0-alpha.2(或nightly build)版本中使用Pomelo.EntityFrameworkCore.MySql 对我来说效果很好。

    我使用以下 SQL 对其进行了测试:

    drop database if exists `So66530902`;
    create database `So66530902`;
    use `So66530902`;
    
    CREATE TABLE `ice_creams` (
        `IceCreamId` int NOT NULL AUTO_INCREMENT,
        `Name` longtext CHARACTER SET utf8mb4 NULL,
        CONSTRAINT `PK_IceCreams` PRIMARY KEY (`IceCreamId`)
    );
    

    然后我使用--use-database-names 参数执行了以下命令:

    dotnet ef dbcontext scaffold "server=127.0.0.1;uid=root;pwd=;port=3308;database=So66530902" Pomelo.EntityFrameworkCore.MySql -c Context -o Models --use-database-names
    

    结果是下面的类:

    using System;
    using System.Collections.Generic;
    
    #nullable disable
    
    namespace IssueConsoleTemplate.Models
    {
        public partial class ice_cream
        {
            public int IceCreamId { get; set; }
            public string Name { get; set; }
        }
    }
    

    需要说明的是,如果你不希望EF Core以任何方式改变数据库表名,你还应该在--use-database-names之外添加--no-pluralize标志。

    【讨论】:

    • 感谢您的帮助!我已经测试过了,它可以正常工作
    猜你喜欢
    • 2014-12-21
    • 2017-09-20
    • 2021-02-05
    • 1970-01-01
    • 2019-02-15
    • 2021-12-24
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多