【问题标题】:Is it possible to reference a .NET Framework Library using Entity Framework 6 from a .NET 5 Blazor App?是否可以使用 .NET 5 Blazor 应用程序中的 Entity Framework 6 引用 .NET Framework 库?
【发布时间】:2021-06-24 00:19:41
【问题描述】:

我们有几个面向 .NET Framework 4.8 并使用 Entity Framework 6 的旧类库。

我们还计划构建一个全新的应用程序,并且有兴趣将 .NET 5 与 Blazor 一起使用,但不确定我们是否可以成功引用和利用这些库。

我在 Blazor 应用程序中添加了对旧项目的引用,还引用了 Entity Framework 6。我将 DBContext 添加到 ConfigureServices 方法中,如下所示:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddScoped<MyDBContext>(); // reference to my EF6 DB Context
}

我还将连接字符串添加到 appsettings.json,如下所示:

  "ConnectionStrings": {
    "MyConnectionString": "XXXXXXXXXXXXXXXXXXXXX" // connection details ommitted
  }

当我尝试运行应用程序并使用引用数据库的代码时,我收到以下错误:

找不到名为“MyConnectionString”的连接字符串 应用程序配置文件。

这看起来很奇怪,因为连接字符串 在 appsettings.json 文件中。

那么,我只是在某个地方犯了一个愚蠢的错误,还是我试图做一些不可能的事情?

【问题讨论】:

    标签: c# sql-server entity-framework-6 blazor .net-5


    【解决方案1】:

    EF 6.3+ supports .NET Standard 2.1.NET 5 targets .NET Standard 2.1

    但是,如果您有面向 .NET Framework 的自定义程序集,则需要将它们重新编译为面向 .NET Standard 2.1,然后才能在 .NET 5 中使用它们。这应该很简单,除非您依赖于其他没有的库'未移植到 .NET Standard/.NET Core。

    但 EF6 将无法自行找到连接字符串。您需要访问配置并将连接字符串传递给 DbContext,如下例所示:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();
        services.AddScoped<MyDBContext>(_ => 
            new SchoolContext(Configuration.GetConnectionString("MyConnectionString")));
    }
    

    https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/data/entity-framework-6/3.xsample/MVCCore/Startup.cs

    【讨论】:

      【解决方案2】:

      不,这不是一个有效的场景; .NET Core / .NET 5 从未提供直接与 .NET Framework 程序集对话的能力,而 blazor 极大地加剧了这一点。有时,这种参考有点奏效,但不受支持 - 甚至 .NET Framework 上的 .NET Standard 支持也屡试不爽,有很多技巧。

      基本上,您需要更新旧库以针对相同的运行时。或者,如果他们还需要在 .NET Framework 上工作,您可能可以从旧库中以 .NET Standard 2.0 为目标,但老实说:同时针对 net48 和 net5 进行 milti-target 的工作通常较少相同的 csproj,而不是处理损坏的 .NET Standard hack 和缺少的 API。不幸的是,EF6 没有 .NET Core / .NET 5 直接翻译;迁移到 EF Core 需要更改代码和进行测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 2019-07-17
        • 2020-02-11
        相关资源
        最近更新 更多