Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework core 如何配置ASP.NET Core 3.1网站的身份、身份验证和授权以使用Entity Framework 6.4_Entity Framework Core_Asp.net Identity_Asp.net Core 3.1_Entity Framework 6.4 - Fatal编程技术网

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

Entity framework core 如何配置ASP.NET Core 3.1网站的身份、身份验证和授权以使用Entity Framework 6.4,entity-framework-core,asp.net-identity,asp.net-core-3.1,entity-framework-6.4,Entity Framework Core,Asp.net Identity,Asp.net Core 3.1,Entity Framework 6.4,提供.NET标准2.1版EF6的目的是帮助分阶段升级现有项目 因此,我们有一个现有的解决方案,包括网站、windows服务和控制台应用程序。我们正在将其从.NET Framework升级到.NET Core 最好在.NETCore中重新运行,但目前仍使用.NET标准2.1版本的EF6 EF6模型源于IdentityDbContext,以包含用户、角色等的身份存储 public class DbContextTasking : IdentityDbContext<AspNetUser, As

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

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

最好在.NETCore中重新运行,但目前仍使用.NET标准2.1版本的EF6

EF6模型源于
IdentityDbContext
,以包含用户、角色等的身份存储

public class DbContextTasking : IdentityDbContext<AspNetUser, AspNetRole, string, AspNetUserLogin, AspNetUserRole, AspNetUserClaim>
但是,.UseSqlServer来自程序集Microsoft.EntityFrameworkCore.SqlServer

以及:

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<DbContextTasking>()
                .AddDefaultTokenProviders();
因此,有人会认为,要让EF6与ASP.NET Core协同工作,就需要一个类似于Microsoft.AspNetCore.Identity.EntityFramework6的包(化名)

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


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

ASP.NET核心标识不支持EF6;您只能使用EF Core。微软喜欢随意地建议,只要EF Core有缺陷(而且经常有很多缺陷),就可以使用EF6,然而自从.NET Core诞生以来,仍然存在着这种明显的支持真空

您有三种选择:

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

  • ASP.NET核心标识在技术上可以与任何数据源一起使用。EF Core是现成的。如果您有时间和意愿,您可以使用您想要的任何技术实现自定义存储。这是一项艰巨的任务,但如果你需要的话,它是可以实现的

  • 您可以使用像Identity Server这样的集中式身份验证提供程序。这从本质上抽象了身份验证层,因此应用程序是在ASP.NET还是在ASP.NET核心中并不重要。但是,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需要更多的支持

  • services.AddDbContext<ApplicationDbContext>(options =>
                    options.UseSqlServer(
                        Configuration.GetConnectionString("DefaultConnection")));
    
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                    .AddEntityFrameworkStores<DbContextTasking>()
                    .AddDefaultTokenProviders();
    
    Microsoft.AspNetCore.Identity.EntityFrameworkCore