如何删除 ASP.NET 标识中重复的 UserId 列

Posted

技术标签:

【中文标题】如何删除 ASP.NET 标识中重复的 UserId 列【英文标题】:How to remove the duplication of UserId column in ASP.NET identity 【发布时间】:2021-12-29 18:52:49 【问题描述】:

在我的 .NET 项目中,我创建了一个类“ApplicationUser”,它像这样从 IdentityUser 继承


   public class ApplicationUser : IdentityUser
   
       public ICollection<Task> Tasks  get; set; 
       public ICollection<Category> Categories  get; set; 
   
 

并像这样与“类别”类建立一对多关系:

namespace ToDo.Models

    public class Category
    
        public int CategoryId  get; set; 
        [Required(ErrorMessage = "Category Name is required.")]
        public string CategoryName  get; set; 
        public string UserId  get; set; 
        public ICollection<Task> Tasks  get; set; 
        public ApplicationUser ApplicationUser  get; set; 
    

但是当我创建一个新类别时,它会进入数据库,其中包含两列 Id,第一列是 UserId,第二列是 ApplicationUserId,这是我没有创建的,有人可以帮帮我吗? 提前致谢。 还有一张来自数据库的图片

【问题讨论】:

你不能从你的模型中删除 UserId col 吗? ApplicationUser 模型不包含 ApplicationUserId 属性,它继承自 IdentityUser 问题解决了吗? 【参考方案1】:

按照惯例,EF 会将外键创建为“NavigationPropertyId”,因此 EF 将 ApplicationUserId 创建为您的外键。它只是认为 UserId 是您出于自己的目的添加到类中的一些值。

您可以将 EF 配置为专门使用 UserId 作为 Fluent API 中 ApplicationUser 的 FK:

builder.Entity<Category>()
    .HasOne<ApplicationUser>(p => p.ApplicationUser)
    .WithMany()
    .HasForeignKey(p => p.UserId);

或使用注解:

[ForeignKey("UserId")]
public ApplicationUser ApplicationUser  get; set; 

【讨论】:

以上是关于如何删除 ASP.NET 标识中重复的 UserId 列的主要内容,如果未能解决你的问题,请参考以下文章

使用 ASP.NET 标识时删除 ReturnUrl

ASP.NET中GUID

如何在 ASP.NET MVC 中通过 Ajax 提交表单?

在 ASP.Net Core Dependency Injection 中删除服务 [重复]

如何注销或过期 ASP.NET Core Web API 的 JWT 令牌?

注销功能不适用于 ASP.NET 标识