Blazor WASM 无法使用 Entity Framework Core

问题描述 投票:0回答:1

我正在使用 .NET 8 编写 Blazor WASM 应用程序。今天,我尝试将数据库数据的获取添加到我的应用程序中,但我似乎无法让 Entity Framework Core 工作。我一如既往地使用相同的库。

我像往常一样写下了所有内容,但我似乎找不到问题。当我尝试运行应用程序并尝试使用

OnInitializedAsync
方法从上下文中获取数据时,我在控制台中收到以下错误:

Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100]

未处理的异常渲染组件:类型 MySql.Data.EntityFrameworkCore.Infrastruct.Internal.MySQLOptionsExtension+ExtensionInfo 具有无效的 vtable 方法槽 5,且方法为 none System.TypeLoadException:类型 MySql.Data.EntityFrameworkCore.Infrastruct.Internal.MySQLOptionsExtension+ExtensionInfo 具有无效的 vtable 方法槽 5,且方法为 none

在 Microsoft.EntityFrameworkCore.DbContextOptions.GetHashCode()
在 System.Collections.Concurrent.ConcurrentDictionary

2[[Microsoft.EntityFrameworkCore.Infrastructure.IDbContextOptions, Microsoft.EntityFrameworkCore, Version=8.0.8.0, Culture=neutral, PublicKeyToken=adb9793829ddae60],[System.ValueTuple
2[[System.IServiceProvider、System.ComponentModel、版本=8.0.0.0、Culture=neutral、PublicKeyToken=b03f5f7f11d50a3a]、[System.Collections.Generic.IDictionary
2[[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[System.String, System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]], System.Private.CoreLib, Version=8.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].GetOrAdd[ValueTuple
2] (IDbContextOptions 键,Func
3 valueFactory, ValueTuple
2 工厂参数)
在 Microsoft.EntityFrameworkCore.Internal.ServiceProviderCache.GetOrAdd(IDbContextOptions 选项,布尔providerRequired)
在 Microsoft.EntityFrameworkCore.DbContext.get_ContextServices() 在 Microsoft.EntityFrameworkCore.DbContext.get_Model()
在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1[[MyProject.Components.Models.Player, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].get_EntityType()   at Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1[[MyProject.Components.Models.Player, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].CheckState()
在 Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1[[MyProject.Components.Models.Player, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].get_EntityQueryable() at Microsoft.EntityFrameworkCore.Internal.InternalDbSet
1[[MyProject.Components.Models.Player, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].System.Collections.Generic.IEnumerable.GetEnumerator( ) 在 System.Collections.Generic.List
1[[MyProject.Components.Models.Player, MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]..ctor(IEnumerable
1 集合) 在 System.Linq.Enumerable.ToList[Player](IEnumerable`1 源) 在 C:\Users\FilipMráz\source 中的 MyProject.Pages.Home.OnInitializedAsync() epos\MyProject\MyProject\Pages\Home.razor:第 112 行 在 Microsoft.AspNetCore.Components.ComponentBase.RunInitAndSetParametersAsync()

这是代码:

protected override async Task OnInitializedAsync()
{
    var a = context.CreateDbContext().Players.ToList();

    foreach (var item in a)
    {
        Console.WriteLine(item.Id);
    }
}

这是我的

DbContext
和DbSet的实体:

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; }
}
c# asp.net-core entity-framework-core blazor blazor-webassembly
1个回答
0
投票

Blazor WebAssembly 应用程序在 WebAssembly/浏览器沙箱中运行,从而阻止大多数直接数据库连接。因此,我们无法直接与 SQL Server 数据库交互或在客户端使用 Entity Framework Core (EF Core)。

要在 Blazor WebAssembly 应用程序中使用 EF core,您可以创建 ASP.NET Core Web APIBlazor Server 应用程序作为后端,然后在 Blazor WebAssembly 客户端中使用

HttpClient
调用 API 方法获取或发送数据。

此外,您还可以尝试使用 Blazor Web App Template 创建 Blazor Web 应用程序,然后选择 Auto(Server 和 WebAssembly)模式,如下所示:

blazor web app

之后,在服务器应用程序中,您可以使用 EF core 并创建 API 端点(不要忘记在 Program.cs 中启用相关的中间件和服务):

blazer app

© www.soinside.com 2019 - 2024. All rights reserved.