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