MySQL8.0.22+EntityFramework-表不存在(数据库/模式两次)
c#
我正在为我的 ASP.Net 网站使用 EntityFramework,之前使用过 MsSQL,效果很好。现在我正在尝试从 MsSQL 迁移到 MySQL(使用 MySQL Workbench 8.0.22 的迁移向导将数据库从 MySQL 迁移到 MsSQL)。这是我的设置:
- Visual Studio 2019 社区版 16.6.1
- Visual Studio 扩展:用于 Visual Studio 8.0.22 的 MySQL
- MySQL 服务器 8.0.22
- 连接器/网络 8.0.22
- 连接器/ODBC 8.0.22
- NuGet:实体框架 6.4.4
- NuGet:MySql.Data 8.0.22
- NuGet:MySql.Data.EntityFramework 8.0.22
我可以使用 EntityFrameWork 从我的 MySQL 数据库/模式“测试”创建实体。但是一旦我尝试使用实体,我就会收到以下错误:
表“test.test.tbl_groupspermissions”不存在
我想问题是,它尝试访问表“tbl_groupspermissions”两次,其中包含数据库/模式名称(test.test)。
我已经检查过表名是否正确。
我的 web.config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.EntityFramework, Version=8.0.22.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
</providers>
</entityFramework>
<connectionStrings>
<add name="testConnectionString" connectionString="server=localhost;port=3306;database=test;user id=root;password=******;" providerName="MySql.Data.MySqlClient" />
<add name="testMySQLEntities" connectionString="metadata=res://*/Entities.MySQLModel.csdl|res://*/Entities.MySQLModel.ssdl|res://*/Entities.MySQLModel.msl;provider=MySql.Data.MySqlClient;provider connection string="server=localhost;port=3306;user id=root;password=******;database=test;persistsecurityinfo=True"" providerName="System.Data.EntityClient" />
</connectionStrings>
错误出现在这部分(testEntities.tbl_groupsstatus.Where):
public bool hasGuestStatus(int statusId)
{
List<tbl_groupsstatus> statis = testEntities.tbl_groupsstatus.Where(p => p.groupId == (int)ProtectedGroups.Gast).ToList();
bool hasStatus = false;
foreach (tbl_groupsstatus status in statis)
{
if (status.statusId == statusId) { hasStatus = true; }
}
return hasStatus;
}
堆栈跟踪告诉我,它使用了正确的驱动程序:
[MySqlException (0x80004005): Table 'test.test.tbl_groupspermissions' doesn't exist]
MySql.Data.MySqlClient.MySqlStream.ReadPacket() +309
MySql.Data.MySqlClient.NativeDriver.GetResult(Int32& affectedRow, Int64& insertedId) +67
MySql.Data.MySqlClient.Driver.GetResult(Int32 statementId, Int32& affectedRows, Int64& insertedId) +17
MySql.Data.MySqlClient.Driver.NextResult(Int32 statementId, Boolean force) +110
MySql.Data.MySqlClient.MySqlDataReader.NextResult() +931
MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior) +1636
MySql.Data.EntityFramework.EFMySqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +33
我在这里看到了 8.0.22 版的相关问题,但没有任何令人满意的解决方案:
添加 Mysql 实体框架时,Visual Studio 中的表“dbname.dbname.tablename”不存在错误
VS 2019 和 MySQL Entity Framework 重复的数据库名称
在 EF 中为 MYSQL DB 添加了 2 次架构/数据库名称
实体框架迁移“表不存在”
谢谢你的帮助。
更新
正如Bradley Grainger 所提到的,它可能是MySql.Data.EntityFramework 8.0.22 组件的一个错误。降级到 MySql.Data.EntityFramework 8.0.21 为我解决了这个问题。
回答
- 关闭您的视觉工作室项目
- 用记事本编辑 MySQLModel.edmx 文件
- 替换文件中的匹配项,从 Schema="Test" 到 Schema=""
- 保存 MySQLModel.edmx 文件
- 打开视觉工作室项目
- 编译项目
- 运行应用程序
THE END
二维码