如何首先使用代码向 Identity 默认表 AspNetUsers 添加多对多关系?

Posted

技术标签:

【中文标题】如何首先使用代码向 Identity 默认表 AspNetUsers 添加多对多关系?【英文标题】:How to add a many-to-many relationship to Identity default table AspNetUsers with code first? 【发布时间】:2015-10-27 17:37:51 【问题描述】:

我是 Identity 框架和 Code First 方法的新手。现在我在 VS 2015 上创建新的 MVC5 项目时使用默认项目。

运行项目时生成的默认表很好,但我希望它与其他表一起生成一个名为 tbSkills (Id, SkillName) 的新表,并且它必须与 AspNetUsers 具有多对多关系。

那么我必须在哪里写什么来完成这个?

ps:我还按照教程将 Id 类型从 string 更改为 int,效果很好。

这是我最后尝试的,在 ApplicationUser 类中的 IdentityModels.cs 文件中:

public class ApplicationUser : IdentityUser<int, MyUserLogin, MyUserRole, MyUserClaim>, IUser<int>

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
    
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    

    // // This following is my added code 
    public ApplicationUser()
    
        Skills = new HashSet<tbSkill>();
    

    public virtual ICollection<tbSkill> Skills  get; set; 


public class tbSkill

    public tbSkill()
    
        Users = new HashSet<ApplicationUser>();
    

    public int Id;
    public string SkillName;

    public virtual ICollection<ApplicationUser> Users  get; set; 

以这个错误结束:

我已经研究和阅读了一堆文章,但没有成功。

【问题讨论】:

【参考方案1】:

尝试添加技能ID

public class ApplicationUser : IdentityUser<int, MyUserLogin, MyUserRole, MyUserClaim>, IUser<int>

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser, int> manager)
    
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        return userIdentity;
    

    // // This following is my added code 
    public ApplicationUser()
    
        Skills = new HashSet<tbSkill>();
    
    public int SkillId get;set;
    public virtual ICollection<tbSkill> Skills  get; set; 

【讨论】:

以上是关于如何首先使用代码向 Identity 默认表 AspNetUsers 添加多对多关系?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Slick 3 生成 BIGSERIAL 而不是 GENERATED BY DEFAULT AS IDENTITY?

在 Dbeaver 上创建 Postgres 表时不能使用“GENERATED ALWAYS AS IDENTITY”?

ASP.NET Identity - 更改代码首先生成的数据库字段长度以提高性能

ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名时出错

EF6 使用列默认值创建代码优先表

如何向已经使用 Identity 的 MVC 控制器添加 API 身份验证和授权?