使用 EF Core 搭建 MySql 数据库的问题 - 找不到方法:无效 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping
Posted
技术标签:
【中文标题】使用 EF Core 搭建 MySql 数据库的问题 - 找不到方法:无效 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping【英文标题】:Issue with scaffolding a MySql database with EF Core - Method not found: Void Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping 【发布时间】:2021-03-19 02:07:18 【问题描述】:我正在尝试首先在 Visual Studio 2019 的 .NET Core 3.1 上使用 mysql.Data.EntityFrameworkCore
和 Microsoft.EntityFrameworkCore
构建 MySql 数据库代码。但是,我不断收到以下错误:
找不到方法:'无效 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping..ctor(System.String, System.Type, System.Nullable
1<System.Data.DbType>, Boolean, System.Nullable
1)'。
我在 GitHub 上查看了 EF Core 的源代码,但找不到与该签名匹配的方法 - 我是否遗漏了什么?
我的脚手架代码是:
dotnet ef dbcontext scaffold "Server=localhost;Database=database;Uid=myuid;" MySql.Data.EntityFrameworkCore -o Solution --project Solution.Project.Namespace
我也试过
dotnet ef dbcontext scaffold "Server=localhost;Database=database;Uid=myuid;" MySQL.Data.EntityFrameworkCore -o Solution --project Solution.Project.Namespace
我尝试通过 Developer PowerShell 和 Package Manager Console 运行这两个命令。结果一样。
我的 DbContext 是
using Solution.Data.Models;
using Microsoft.EntityFrameworkCore;
using MySQL.Data.EntityFrameworkCore; // I tried using MySql.Data.EntityFrameworkCore as well
using System;
using System.Collections.Generic;
using System.Text;
namespace Solution.Backend
public class SolutionDBContext : DbContext
public DbSet<User> Users get; set;
public DbSet<Product> Products get; set;
public DbSet<Journal> Journals get; set;
public DbSet<JournalComment> JournalComments get; set;
public DbSet<CartItem> CartItems get; set;
public DbSet<Order> Orders get; set;
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
optionsBuilder.UseMySQL("Server=localhost;Database=database;Uid=myuid;");
protected override void OnModelCreating(ModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
我的 DbContext 代码位于名为 Solution.Backend 的项目中,而我的模型位于名为 Solution.Data
的项目中如果我注释掉所有 DbSet
s 并尝试在 DbContext 中除了 OnConfiguring
和 OnModelCreating
代码之外没有任何东西运行它,我会得到相同的结果。我是否遗漏了一些明显的东西,或者我遗漏了什么,或者这是一个已知的错误?我在任何地方都没有在网上找到有关此特定问题的任何信息。我很感激这里的一些帮助!提前致谢。
【问题讨论】:
确保您使用的是正确的命名空间。命名空间等同于文件夹名称,类等同于文件名。 VS 当你有一个唯一的类名时,编译器会自动找到它。当您有重复的类名时,您必须指定完整的命名空间和类名。 您能否更具体一点 - 哪个命名空间是问题?在dotnet ef dbcontext scaffold "Server=localhost;Database=database;Uid=myuid;" MySql.Data.EntityFrameworkCore -o *Solution* --project *Solution.Project.Namespace*
我尝试更改为 -o Solution.*Project*.*Namespace* 但它给了我同样的问题。
代码更改。我看起来类似于以下内容:Solution.Data.Solution.Backend.SolutionDBContext.Users
【参考方案1】:
MySql.Data.EntityFrameworkCore 8.0.22 仅与 Microsoft.EntityFrameworkCore 3.1 兼容。将所有 Microsoft.EntityFramework 包从 5.0.0 降级到 3.1.10 以修复错误。
随着 2021 年 1 月 18 日 MySQL Connector/NET 8.0.23 的发布,Oracle 现在发布了与 Microsoft.EntityFramework 5.0 兼容的不同 NuGet 包:MySql.EntityFrameworkCore。
请参阅table of version compatibility here。
或者,您可以尝试切换到Pomelo.EntityFrameworkCore.MySql 5.0.0-alpha.2(或更高版本);查看它的table of compatible package versions。
【讨论】:
我为这个问题受了两天的苦。你救了我的命。 这成功了:Install-Package Microsoft.EntityFrameworkCore.Tools -version 3.1.10 因为我真的离不开5.0.0,所以除了降级实体框架还有别的办法吗??? @KingKongBigBong 是的,改用MySql.EntityFrameworkCore
包。以上是关于使用 EF Core 搭建 MySql 数据库的问题 - 找不到方法:无效 Microsoft.EntityFrameworkCore.Storage.RelationalTypeMapping的主要内容,如果未能解决你的问题,请参考以下文章
将 EF Core 搭建到现有 DbContext 的脚手架
EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型