pat*_*gle 5 c# asp.net-core-2.0
我正在尝试将ASPNET Core 2.0中的主键更改为Guid或long.
但是,在Startup类中,我收到以下错误
 Error  CS1061  'IdentityBuilder' does not contain a definition for
 'AddEntityFrameworkStores' and no extension method 'AddEntityFrameworkStores' accepting 
 a first argument of type 'IdentityBuilder' could be found (are you missing a using 
 directive or an assembly reference?)
我认为原因是这些例子都是基于旧的ASPNET Core 1.0.如何在ASPNET Core 2.0中更改Identity的主键?
小智 8
为我修复的只是通过 NuGet添加“ Microsoft.AspNetCore.Identity.EntityFrameworkCore ”
如果它与我在将 Identity 添加到我的 Core 3.1 项目时遇到的类似问题类似,那么这可能已移到单独的 NuGet 包中。(我将我的 .NET CORE 项目从 2.1 更新到 3.1,但我在 Startup 类中有一些错误)
有关如何执行此操作的信息可以在此链接的评论中找到https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x
Change ApplicationUser to inherit from IdentityUser<int>
Create a new class ApplicationRole that inherits from IdentityRole<int>
Change ApplicationDbContext to inherit from IdentityDbContext<ApplicationUser, ApplicationRole, int>
Change startup.cs for services.AddIdentity to use ApplicationRole
Change UrlHelperExtensions methods to take a generic <T> with T userId in the signature
Change ManageController's LinkLoginCallback's call to await _signInManager.GetExternalLoginInfoAsync(user.Id.ToString())
Add the following line to the ApplicationDbContext OnModelCreating method (after the base.OnModelCreating call)
builder.Entity<ApplicationUser>().Property(p => p.Id).UseSqlServerIdentityColumn();
如果使用Guid然后替换builder.Entity<ApplicationUser>().Property(p => p.Id).UseSqlServerIdentityColumn();用builder.Entity<ApplicationUser>().Property(p => p.Id).ValueGeneratedOnAdd();
所有更改如下
public class ApplicationUser : IdentityUser<Guid>
{
}
public class ApplicationRole : IdentityRole<Guid>
{
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, Guid>
{
    Public ApplicationDbContext(DbContextOptions < ApplicationDbContext > Options): Base (Options)
    {
    }
    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);
        // Customize the ASP.NET Identity model and override the defaults if needed.
        // For example, you can rename the ASP.NET Identity table names and more.
        // Add your customizations after calling base.OnModelCreating(builder);
        // For Guid Primary Key
        builder.Entity<ApplicationUser>().Property(p => p.Id).ValueGeneratedOnAdd();
        // For int Primary Key
        //builder.Entity<ApplicationUser>().Property(p => p.Id).UseSqlServerIdentityColumn();
    }
}
public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    services.AddIdentity<ApplicationUser, ApplicationRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();
    // Add application services.
    services.AddTransient<IEmailSender, EmailSender>();
    services.AddMvc();
}
public static class UrlHelperExtensions
{
    public static string EmailConfirmationLink<T>(this IUrlHelper urlHelper, T userId, string code, string scheme)
    {
        return urlHelper.Action(
            action: nameof(AccountController.ConfirmEmail),
            controller: "Account",
            values: new { userId, code },
            protocol: scheme);
    }
    public static string ResetPasswordCallbackLink<T>(this IUrlHelper urlHelper, T userId, string code, string scheme)
    {
        return urlHelper.Action(
            action: nameof(AccountController.ResetPassword),
            controller: "Account",
            values: new { userId, code },
            protocol: scheme);
    }
}
....
var info = await _signInManager.GetExternalLoginInfoAsync(user.Id.ToString());
| 归档时间: | 
 | 
| 查看次数: | 3004 次 | 
| 最近记录: |