如何配置带有标识、身份验证和授权的ASP.NET Core 3.1网站以使用Entity Framework 6.4



提供.NET Standard 2.1版本的EF6的目的是帮助分阶段升级现有项目。

因此,我们有一个现有的解决方案,包括网站、windows服务和控制台应用程序。我们正在将它从.NET Framework升级到.NET Core。

最好在.NET Core中重新运行,但目前仍在使用EF6的.NET Standard 2.1版本。

EF6模型源自IdentityDbContext,从而包含用户、角色等的身份存储。

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

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

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

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

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

"使用.NET Framework 4.6.1还原了包x……此包可能不完全兼容…">

暂时忽略这些警告,节目主持人正在了解如何让一个具有身份、身份验证和授权的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();

CCD_ 4再次涉及EF核心存储。

例如2

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

Microsoft.AspNetCore.Identity.EntityFrameworkCore

因此,有人会认为,要让EF6与ASP.NET Core一起工作,就需要一个与Microsoft.AspNetCore.Identity.EntityFramework6性质相似的包(虚构名称(

如果可以将EF6.4(股份有限公司身份相关表(与ASP.NET Core结合使用,请您指出一个实现这一点的示例?

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

EF6不支持ASP.NET核心标识;您只能使用EF Core。微软喜欢随意地建议,只要EF Core有一些不足(而且不断有很多不足(,你就可以随时使用EF6,但自从.NET Core诞生以来,仍然存在明显的支持真空。

你有三个选择:

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

  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需要更多的麻烦。