C# 在ASP.NET Core 2.0中更新标识

C# 在ASP.NET Core 2.0中更新标识,c#,entity-framework,asp.net-core-identity,C#,Entity Framework,Asp.net Core Identity,我在尝试替换ASP.NET Core Identity中的IdentityUser导航属性时遇到问题,该属性在2.0版本中更新过 我看了一下,但对于如何真正做到这一点,几乎没有什么解释 在ApplicationUser.cs中,我添加了以下内容: public virtual ICollection<IdentityUserRole<string>> Roles { get; } = List<IdentityUserRole<string>&g

我在尝试替换ASP.NET Core Identity中的IdentityUser导航属性时遇到问题,该属性在2.0版本中更新过

我看了一下,但对于如何真正做到这一点,几乎没有什么解释

在ApplicationUser.cs中,我添加了以下内容:

public virtual ICollection<IdentityUserRole<string>> Roles
    { get; } = List<IdentityUserRole<string>>();
公共虚拟ICollection角色
{get;}=List();
但当我尝试使用该导航属性时,它使用了ApplicationSerid而不是UserId


欢迎提出任何建议,因为这不是直观的,希望身份团队可以在文档中进一步阐述。

在我的案例中,我有三个派生类别ApplicationUserClaim、ApplicationUserLogin和ApplicationUserRole。我这样做是因为我需要添加一些自定义属性

没有添加属性的派生类应该如下所示

public class ApplicationUserLogin : IdentityUserLogin<string>
{
    public virtual ApplicationUser ApplicationUser { get; set; }
}


public class ApplicationUserRole: IdentityUserRole<string>
{
    public virtual ApplicationUser ApplicationUser { get; set; }
}


public class ApplicationUserClaim: IdentityUserClaim<string>
{
     public virtual ApplicationUser ApplicationUser { get; set; }
}
public类ApplicationUserLogin:IdentityUserLogin
{
公共虚拟应用程序用户应用程序用户{get;set;}
}
公共类ApplicationUserRole:IdentityUserRole
{
公共虚拟应用程序用户应用程序用户{get;set;}
}
公共类ApplicationUserClaim:IdentityUserClaim
{
公共虚拟应用程序用户应用程序用户{get;set;}
}
在应用程序用户上添加以下代码:

public virtual ICollection<ApplicationUserRole> Roles { get; } = new List<ApplicationUserRole>();

public virtual ICollection<ApplicationUserClaim> Claims { get; } = new List<ApplicationUserClaim>();

public virtual ICollection<ApplicationUserLogin> Logins { get; } = new List<ApplicationUserLogin>();
modelBuilder.Entity<ApplicationUserClaim>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Claims).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserRole>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Roles).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserLogin>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Logins).HasForeignKey(pt => pt.UserId);
公共虚拟ICollection角色{get;}=new List();
公共虚拟ICollection声明{get;}=new List();
公共虚拟ICollection登录名{get;}=new List();
在应用程序的bContext上添加以下代码:

public virtual ICollection<ApplicationUserRole> Roles { get; } = new List<ApplicationUserRole>();

public virtual ICollection<ApplicationUserClaim> Claims { get; } = new List<ApplicationUserClaim>();

public virtual ICollection<ApplicationUserLogin> Logins { get; } = new List<ApplicationUserLogin>();
modelBuilder.Entity<ApplicationUserClaim>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Claims).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserRole>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Roles).HasForeignKey(pt => pt.UserId);

modelBuilder.Entity<ApplicationUserLogin>().HasOne(pt => pt.ApplicationUser).WithMany(t => t.Logins).HasForeignKey(pt => pt.UserId);
modelBuilder.Entity().HasOne(pt=>pt.ApplicationUser).WithMany(t=>t.Claims).HasForeignKey(pt=>pt.UserId);
modelBuilder.Entity().HasOne(pt=>pt.ApplicationUser).WithMany(t=>t.Roles).HasForeignKey(pt=>pt.UserId);
modelBuilder.Entity().HasOne(pt=>pt.ApplicationUser).WithMany(t=>t.Logins).HasForeignKey(pt=>pt.UserId);

进行迁移,您就完成了

将以下内容添加到ApplicationDbContext.cs中的OnModelCreating中,解决了我在GitHub问题中发现的问题

builder.Entity().HasMany(p=>p.Roles)
.WithOne().HasForeignKey(ur=>ur.UserId).IsRequired();