.NET 8 Blazor WASM使用Entity Framework Core遇TypeLoadException错误求助
在.NET 8版本的Blazor WASM应用中,尝试通过Entity Framework Core获取MySQL数据库数据时,调用DbContext执行查询操作抛出TypeLoadException,错误信息如下:
类型MySql.Data.EntityFrameworkCore.Infrastructure.Internal.MySQLOptionsExtension+ExtensionInfo的虚表方法槽5无效,方法不存在
相关调用代码:
protected override async Task OnInitializedAsync() { var a = context.CreateDbContext().Players.ToList(); foreach (var item in a) { Console.WriteLine(item.Id); } }
DbContext及实体类定义:
public class CustomDbContext : DbContext { public DbSet<Player> Players { get; set; } public DbSet<Tournament> Tournaments { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySQL("myConString"); } } [Table("Players")] public class Player { public int Id { get; set; } }
替换兼容的MySQL EF Core驱动
你当前使用的MySql.Data.EntityFrameworkCore包已被官方标记为过时,且版本不兼容.NET 8。EF Core 8对扩展接口的虚方法做了更新,旧驱动未实现新增方法导致类型加载失败。需卸载旧包,安装官方适配.NET 8的MySql.EntityFrameworkCore包,确保版本≥8.0.33。修正DbContext配置
使用新驱动后,保持连接字符串配置正确,示例如下:protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySQL("server=你的数据库地址;database=数据库名;user=用户名;password=密码;"); }调整Blazor WASM数据访问架构
Blazor WASM运行在浏览器环境中,直接通过前端连接MySQL会暴露连接字符串(存在安全风险),且浏览器网络限制可能导致连接失败。建议搭建ASP.NET Core Web API作为后端,由后端处理数据库操作,Blazor WASM通过HTTP请求调用API获取数据。清理重建项目
删除项目目录下的bin和obj文件夹,执行dotnet restore恢复依赖,重新编译运行项目。
内容的提问来源于stack exchange,提问作者Filip Mráz

