无法在 .net core 3.1 中构建来自 MySQL 的“日期时间”类型列

Unable to scaffold “datetime” type columns from MySQL in .net core 3.1

过去曾发布过关于 scaffolding in .net core 2 的类似问题,但那是在 date 专栏中,迄今为止尚未发布任何解决方案。

没有特定的 table,因为任何包含 datetime 列类型的 table 都会从控制台抛出以下错误:

Could not find type mapping for column 'database.table.columnname' with data type 'datetime'. Skipping column.

This answer 关于读取 datetime 值的问题和 MySQL 与 0000-00-00 00:00:00 值的怪癖让我想知道更改连接字符串格式是否有帮助。所以我将 ConvertZeroDateTime=true 添加到脚手架命令中的连接字符串:

Scaffold-DbContext "server=localhost;port=3306;user=root;password=notherealpassword;database=sodb;ConvertZeroDateTime=true;" MySql.Data.EntityFrameworkCore -OutputDir Model -f

我仍然有同样的错误,有人有什么建议吗?我在该数据库中有 380 多个 table,因此自动化解决方案将是最有帮助的。

我正在使用 pomelo 在 .net core 2.2 中搭建 mySql 5.7 没问题,直到我尝试升级到 3.1

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.2.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.2.6">
<PackageReference Include="MySql.Data" Version="8.0.21" />
<PackageReference Include="MySql.Data.EntityFrameworkCore.Design" Version="8.0.19" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.2.6" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />

这个组合对我来说很管用

PM> Scaffold-DbContext [ConnectionStringHere] MySql.Data.EntityFrameworkCore -OutputDir [NameHere] -Project "[NameHere]" -Force

使用以下包,脚手架完全跳过日期时间(字节也被转换为布尔值)

所以要解决方法。我使用我的源代码控制来保留旧的日期时间 类 并且只是手动更新了 bools。您可以尝试降级到旧版本,看看是否有帮助。

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.11"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.11" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.11">
<PackageReference Include="MySql.Data" Version="8.0.23" />
<PackageReference Include="MySql.Data.EntityFrameworkCore.Design" Version="8.0.19" />
<PackageReference Include="NonFactors.Grid.Mvc6" Version="6.1.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.4" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Design" Version="1.1.2" />

我遇到了同样的问题,现在我解决了。

我不能确定我的解决方案是否适用于您的情况,但我认为此解决方案适用于您的情况。

  1. 删除与 Entity Framework.
  2. 相关的所有包
  3. 安装以下软件包,版本为 5.0.4

  1. 打开包管理器控制台window。现在我们将安装依赖于 .Net 标准的 Pomelo 包。
  2. 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2”
  3. 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql.NetTopologySuite -Version 5.0.0-alpha.2”

命令尝试安装以下包。

  1. 现在在程序包管理器控制台 window 输入以下命令。 Scaffold-DbContext "server=localhost;port=3306;uid=root;pwd=notherealpassword;database=sodb; "Pomelo.EntityFrameworkCore.MySql" -OutputDir Models -f

  2. 命令结果如下。

希望post对您有所帮助。

我遇到了像你一样的 datetime/timestamp 错误,我必须使用这些包才能正常工作 mysql.entityframeworkcore 没有必要

而导出的命令是

dotnet ef dbcontext scaffold "Database=@dbname;Data Source=@ip:@port;User Id=@user;Password=@pass;Initial Catalog=@dbname;" pomelo.entityframeworkcore.mysql -o Models -f -c DBContext

我今天已经使用以下 Nugets 解决了这个问题:-

然后在 Visual Studio 的程序包管理器控制台中:-

Scaffold-DbContext "server=MYSERVER;port=3306;database=MYDB;user=MYUSER;password=MYPW;" MySql.EntityFrameworkCore -UseDatabaseNames -f

“-UseDatabaseNames”和“-f”标志对于裸修复来说不是必需的,但这就是我正在使用的

关键的细节是 MySql.EntityFrameworkCore v5.0.3 在 v5.0.0 不工作的地方工作。