ASP.NET Core使用EF6和Identity定位完整框架

Bra*_*don 9 c# asp.net-identity asp.net-core-mvc

我目前有一个针对完整.NET Framework的.NET Core Web App和一个包含我的EF6实现的.NET 4.6.1类库项目.

我这两个目前正在合作.

现在我需要添加Identity,但我需要自定义实现.(如果重要的话,我正在建立一个现有的用户表,只关心本地登录)

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

我坚持的部分是如何配置.NET Core App以使用非Core版本的Identity.

所有教程都有类似的配置

services.AddIdentity<ApplicationUser, ApplicationRole>(config => { })
        .AddEntityFrameworkStores<ApplicationDbContext>();
Run Code Online (Sandbox Code Playgroud)

app.UseIdentity();
Run Code Online (Sandbox Code Playgroud)

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

.NET Core App应该引用哪些框架?Startup.cs配置应该是什么样的?

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

Startup.cs代码如下所示(引用了AspNetCore.Identity)

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

样本控制器

public AccountController(ApplicationSignInManager signInManager)
{
    _signInManager = signInManager;
}
Run Code Online (Sandbox Code Playgroud)

尝试运行时出错

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

Rom*_*kij 0

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

您应该严格区分两个api:ASP NET Identity https://github.com/aspnet/AspNetIdentity和 ASP NET Core Identity https://github.com/aspnet/Identity

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

应引用 ASP NET Core Identity (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 命名空间)。