DataAnnotation和Code First使用Identity 2.2.1为ApplicationUser创建外

本文关键字:创建 ApplicationUser Identity Code First 使用 DataAnnotation | 更新日期: 2023-09-27 18:26:09

简介

我正在尝试构建一个代码优先表,它将有一个与ApplicationUser相关的第三个表。我一直在搜索SO和谷歌,像往常一样,寻找解决我问题的方法,因为我确信我不是第一个遇到这个问题的人,但我尝试的所有解决方案都不起作用。也许是因为我使用的ASP.NET Identity(2.2.1版)需要一个与我发现的不同的解决方案,或者有些概念我还不熟悉。

从本质上讲,我试图构建的正是具有不同含义的IdentityUserRole类。我想使用DataAnnotations而不是他们使用的方法来构建它。虽然我很欣赏其他解决方案和做同样事情的方法,而且我正在做一个真正的项目,但我确实喜欢学习,至少想学习如何使用DataAnnotation。

话虽如此,以下是好东西:

类别

Sections类,它将相对于IdentityRole类

public class Sections {
    [Key]
    [StringLength(128)]
    public virtual String Id { get; set; }
    [Required]
    [Index("SectionsNameIndex", IsUnique = true)]
    [MaxLength(256)]
    [Display(Name = "Section Name")]
    public virtual String Name { get; set; }
}

这里是UserSections类,它将相对于IdentityUserRole类

版本1

public class UserSections {
    [Key, Column(Order = 1)]
    [Index]
    [StringLength(128)]
    [ForeignKey("User")]
    public virtual String UserId { get; set; }
    
    public virtual ApplicationUser User { get; set; }
    
    [Key, Column(Order = 2)]
    [Index]
    [StringLength(128)]
    [ForeignKey("Section")]
    public virtual String SectionId { get; set; }
    
    public virtual Sections Section { get; set; }
}

版本2

public class UserSections {
    [Key, Column(Order = 1)]
    [Index]
    [StringLength(128)]
    public virtual String UserId { get; set; }
    
    [ForeignKey("UserId")]
    public virtual ApplicationUser User { get; set; }
    
    [Key, Column(Order = 2)]
    [Index]
    [StringLength(128)]
    public virtual String SectionId { get; set; }
    
    [ForeignKey("SectionId")]
    public virtual Sections Section { get; set; }
}

问题

问题是任何一个版本我得到以下错误:

在模型生成过程中检测到一个或多个验证错误:

{MyProjectName}.DataContexts.IdentityUserLogin::EntityType"IdentityUserLogin"未定义键。定义此EntityType的键。

{MyProjectName}.DataContexts.IdentityUserRole::EntityType"IdentityUserRole"未定义键。定义此EntityType的键。

IdentityUserLogins:EntityType:EntitySet"IdentityUser Logins"基于未定义键的类型"Identity UserLogin"。

IdentityUserRoles:EntityType:EntitySet"IdentityUser Roles"基于未定义键的类型"Identity UserRole"。

问题

如果可能的话,我如何使用DataAnnotations使其像IdentityUserRoles那样工作,而不创建第三个类来扩展ApplicationUser类?

更新#1

根据给出的答案,这里有更多信息。我确实创建了一个辅助上下文,使其远离身份上下文。当我尝试使用与标识部分相同的上下文时,它起了作用。但是,有没有一种方法可以使用不同的上下文来实现这一点?

DataAnnotation和Code First使用Identity 2.2.1为ApplicationUser创建外

正如Stephen Reindl和Steve Greene所评论的,我的问题的解决方案是使用与ApplicationUser相同的上下文。