无法在 .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" />
我遇到了同样的问题,现在我解决了。
我不能确定我的解决方案是否适用于您的情况,但我认为此解决方案适用于您的情况。
- 删除与 Entity Framework.
相关的所有包
- 安装以下软件包,版本为 5.0.4
- 打开包管理器控制台window。现在我们将安装依赖于 .Net 标准的 Pomelo 包。
- 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2”
- 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql.NetTopologySuite -Version 5.0.0-alpha.2”
命令尝试安装以下包。
现在在程序包管理器控制台 window 输入以下命令。
Scaffold-DbContext "server=localhost;port=3306;uid=root;pwd=notherealpassword;database=sodb; "Pomelo.EntityFrameworkCore.MySql" -OutputDir Models -f
命令结果如下。
希望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 不工作的地方工作。
过去曾发布过关于 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" />
我遇到了同样的问题,现在我解决了。
我不能确定我的解决方案是否适用于您的情况,但我认为此解决方案适用于您的情况。
- 删除与 Entity Framework. 相关的所有包
- 安装以下软件包,版本为 5.0.4
- 打开包管理器控制台window。现在我们将安装依赖于 .Net 标准的 Pomelo 包。
- 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql -Version 5.0.0-alpha.2”
- 输入命令“Install-Package Pomelo.EntityFrameworkCore.MySql.NetTopologySuite -Version 5.0.0-alpha.2”
命令尝试安装以下包。
现在在程序包管理器控制台 window 输入以下命令。 Scaffold-DbContext "server=localhost;port=3306;uid=root;pwd=notherealpassword;database=sodb; "Pomelo.EntityFrameworkCore.MySql" -OutputDir Models -f
命令结果如下。
希望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 不工作的地方工作。