我的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
- 连接器/NET 8.0.22
- 连接器/ODBC 8.0.22
- 实体框架6.4.4
- 数据库管理系统
- MySql.数据.实体框架8.0.22
我可以从我的MySQL数据库/模式“test”中使用EntityFrameWork创建实体。但是当我尝试使用实体时,我得到了以下错误:
表'test.test.tbl_grouppermissions'不存在
我猜问题是,它试图访问表“tbl_grouppermissions”,其中包含两次数据库/模式名称(test.test)。
我已经检查了表名是否正确。
我的网页配置:
<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的相关问题,但没有任何令我满意的解决方案:
Table 'dbname.dbname.tablename' doesn't exists error in Visual Studio when adding Mysql Entity Framework
VS 2019和MySQL实体框架重复的数据库名称
Schema/DB Name added 2 times in EF for MYSQL DB
Entity framework migration "Table does not exist"
谢谢你的帮助。
UPDATE正如Bradley Grainger所提到的,它可能是组件MySql.Data.EntityFramework 8.0.22的bug。降级到MySql.Data.EntityFramework 8.0.21为我解决了这个问题。
4条答案
按热度按时间mrfwxfqh1#
1.关闭Visual Studio项目
1.使用记事本编辑MySQLModel.edmx文件
1.替换文件中从Schema=“Test”到Schema="”的匹配项
1.保存MySQLModel.edmx文件
1.打开visual studio项目
1.编译项目
1.执行应用程序
weylhg0b2#
这是MySql.Data.EntityFramework 8.0.22中的一个已知错误:Bug 101236。
您可以通过将MySql.Data.EntityFramework降级到8.0.21来解决此问题。
rjee0c153#
我在此设置中遇到了同样的问题:
-MySQL服务器8.0.25
-NuGet:实体框架6.4.4
-NuGet:我的SQL数据库8.0.25
-NuGet:MySql.数据.实体框架8.0.25
对我来说,解决方案是重新安装MySQL for Visual Studio扩展,并修改MySQLModel.edmx文件,就像在@adamskorp回答中一样。也许是安装上的bug之类的。
lrl1mhuk4#
我有3张table有这个问题,而其他的都很好...
已检查生成的edmx文件(DB-First-Approach),它们的条目不同,原因如下:
工作行数:
导致问题的表定义为:
我不知道,为什么这3个表导致一个不同的标记-但只是修改它看起来像第一个表示和一切工作的预期。