EntityFramework Core 3.1 + MySql 或 Pomelo 重命名 table 以使用 DBFirst

EntityFramework Core 3.1 + with MySql or Pomelo rename table to use DBFirst

我做了两个测试项目,一个用 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

我的数据库中有 table 如下所示: brand_cars 以及执行 dbFirst 过程时。 它将我的名字更改为 BrandCars。

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

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

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

我的连接器版本如下:

-为了 Pomelo 项目

Microsoft.EntityFrameworkCore.Tools 3.1.12

Pomelo.EntityFrameworkCore.MySql 3.2.4

Pomelo.EntityFrameworkCore.MySql.设计 1.1.2

-对于MySQL项目

Microsoft.EntityFrameworkCore.Design 5.0.3

Microsoft.EntityFrameworkCore.Tools 5.0.3

MySql.EntityFrameworkCore 5.0.0

使用 Pomelo.EntityFrameworkCore.MySql in its 5.0.0-alpha.2 (or nightly build) 版本对我来说效果很好。

我使用以下方法对其进行了测试 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

结果如下class:

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 以 any 方式更改数据库 table 名称,您还应该添加 --no-pluralize 标志除了 --use-database-names.