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
根据给出的答案,这里有更多信息。我确实创建了一个辅助上下文,使其远离身份上下文。当我尝试使用与标识部分相同的上下文时,它起了作用。但是,有没有一种方法可以使用不同的上下文来实现这一点?
正如Stephen Reindl和Steve Greene所评论的,我的问题的解决方案是使用与ApplicationUser
相同的上下文。