【问题标题】:How to configure ASP.NET Core 3.1 website with identity, authentication and authorization to use Entity Framework 6.4如何使用身份、身份验证和授权配置 ASP.NET Core 3.1 网站以使用 Entity Framework 6.4
【发布时间】:2020-07-12 06:00:28
【问题描述】:

提供 .NET Standard 2.1 版本的 EF6 的目的被理解为协助分阶段升级现有项目。

所以我们有一个由网站、Windows 服务和控制台应用程序组成的现有解决方案。我们正在将其从 .NET Framework 升级到 .NET Core。

最好让它在 .NET Core 中再次运行,但目前仍使用 .NET Standard 2.1 版本的 EF6。

EF6 模型派生自IdentityDbContext 以包含用户、角色等的身份存储。

public class DbContextTasking : IdentityDbContext<AspNetUser, AspNetRole, string, AspNetUserLogin, AspNetUserRole, AspNetUserClaim>

所有代码现在都在 .NET Core 或 .NET Standard 程序集中。

升级后的 Windows 服务和控制台应用程序基本上可以正常工作,但我们在网站方面遇到了困难。

尽管令人担忧的是,为了编译数据层程序集,需要在解决方案资源管理器中显示黄色三角形警告的一些 packageReference:

<PackageReference Include="Microsoft.AspNet.Identity.EntityFramework" Version="2.2.3" />

“包 x 是使用 .NET Framework 4.6.1 恢复的……这个包可能不完全兼容……”

暂时忽略这些警告,表演者正在了解如何获得一个带有身份、身份验证和授权的 ASP.NET Core 网站,以使用 EF6。

例如,显示 EF Core 用法的示例在其 ConfigureServices 函数中:

services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

但是'.UseSqlServer'来自程序集Microsoft.EntityFrameworkCore.SqlServer

还有:

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<DbContextTasking>()
                .AddDefaultTokenProviders();

AddEntityFrameworkStores 再次与 EF Core 存储相关。

例如2

这个包构成了 ASP.NET Core 和身份基础设施之间的桥梁:

Microsoft.AspNetCore.Identity.EntityFrameworkCore

所以有人会认为,要让 EF6 与 ASP.NET Core 一起工作,就需要有一个本质上类似的包(组成名称)Microsoft.AspNetCore.Identity.EntityFramework6

如果可以将 EF6.4(包括身份相关表)与 ASP.NET Core 结合使用,请您指出一个实现此目的的示例吗?

或者,如果您知道这种组合绝对不可能,也请告诉我。

【问题讨论】:

    标签: entity-framework-core asp.net-identity asp.net-core-3.1 entity-framework-6.4


    【解决方案1】:

    ASP.NET Core Identity 不支持 EF6;您只能使用 EF Core。 Microsoft 喜欢随意建议,只要 EF Core 存在一些缺陷(而且经常有很多缺陷),您就可以随时使用 EF6,但自 .NET Core 诞生以来仍然存在这种明显的支持真空。

    您有三个选择:

    1. 在需要 ASP.NET Core Identity 支持的地方使用 EF Core。您必须复制一些代码,但您可以拥有一个 EF Core 上下文和一个 EF 6 上下文,它们都连接到同一个数据库。您应该只将一端或另一端(很可能是 EF Core 端)视为数据库优先,因此不要从那里运行迁移。但是,由于 ASP.NET Core Identity 与 ASP.NET Identity 根本不同,您需要将任何现有的 Identity 表替换/迁移到 Core 版本,然后关闭 ASP.NET Identity 的任何使用。换句话说,你必须选择一个或另一个,排他性的。

    2. ASP.NET Core Identity 可以在技术上与任何数据源一起工作。 EF Core 就是开箱即用的东西。如果您有时间和意愿,您可以使用任何您想要的技术来实现自定义商店。这是一项艰巨的任务,但如果这是您需要的,是可以实现的。

    3. 您可以使用像 Identity Server 这样的集中式身份验证提供程序。这实质上抽象了身份验证层,因此应用程序是在 ASP.NET 还是 ASP.NET Core 中并不重要。但是,Identity Server 4 仅与 ASP.NET Core Identity 和 EF Core 原生集成(本质上是相同的问题)。有一个旧版本的 Identity Server 是为 ASP.NET 构建的,但我不知道它的状态(是否仍然受支持、维护等)或者你是否可以制作 使用 ASP.NET Core。坦率地说,如果您的目标是 .NET Framework 和 .NET Core 之间的交叉兼容,我会选择 Azure AD 或 Auth0 之类的东西,它们都可以使用。它们在大多数情况下也是即插即用的,而 Identity Server 需要更多的麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-16
      • 2019-04-30
      • 2018-08-21
      • 2021-01-07
      • 2022-06-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多