ASP.NET核心针对EF6和Identity的完整框架



我目前有一个.NET核心Web应用程序,目标是完整的.NET Framework和一个包含我的EF6实现的.NET 4.6.1类库项目。

我现在让这两个人一起工作。

现在我需要添加Identity,但我需要自定义实现。(如果重要的话,我是根据现有的用户表构建的,只关心本地登录)

因此,在4.6.1类库项目中,我使用本指南创建了自定义的Identity类/商店/经理:https://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity

我一直关注的部分是如何将.NET核心应用程序配置为使用非核心版本的Identity。

所有教程都有类似的配置

services.AddIdentity<ApplicationUser, ApplicationRole>(config => { })
.AddEntityFrameworkStores<ApplicationDbContext>();

app.UseIdentity();

但是,这两个方法都只存在于Microsoft.AspNetCore.Identity中,而不存在于类库正在使用的Microsoft.AspNet.Identity.Core中。

.NET核心应用程序应该引用哪些框架?Startup.cs的配置应该是什么样子

为了简单起见,我所有的自定义身份代码都与上面链接的文章中的内容完全相同。

Startup.cs代码如下(参考AspNetCore.Identity)

services.AddIdentity<ApplicationUser, CustomRole>(config => { /* config */ })
.AddUserManager<ApplicationUserManager>()
.AddUserStore<CustomRoleStore>()
.AddDefaultTokenProviders();

样品控制器

public AccountController(ApplicationSignInManager signInManager)
{
_signInManager = signInManager;
}

尝试运行时出错

InvalidOperationException:类型ApplicationUserManager必须从UserManager派生。

然而,这两个方法都只存在于Microsoft.AspNetCore.Identity中,而不存在于类库正在使用的Microsoft.AspNet.Identity.Core中。

您应该严格区分两个api:ASP.NET Identityhttps://github.com/aspnet/AspNetIdentity和ASP.NET核心标识https://github.com/aspnet/Identity

.NET核心应用程序应该引用哪些框架?

应该引用ASP.NET核心标识(Microsoft.AspNetCore)。

Startup.cs配置应该是什么样子?

由于要使用EF6,您需要端口"Microsoft.AspNetCore.Identity.EntityFrameworkCore"(https://github.com/aspnet/Identity/tree/master/src/EF)使用EF6。在此之后,您需要提供自己的.AddEntityFrameworkStores<TDbContext>();扩展方法。因此,Startup.cs应该保持不变(除了使用,要引用AddEntityFrameworkStores,您需要指向您移植的lib命名空间)。

相关内容

  • 没有找到相关文章

最新更新