DataAnnotation和Code First首先使用Identity 2.2.1创建ApplicationUser的外键

时间:2015-12-09 04:36:12

标签: c# entity-framework ef-code-first data-annotations ef-migrations

简介

我正在尝试构建一个代码第一个表,它将有一个第3个表,将它与ApplicationUser相关联。我一直在寻找SO和谷歌,就像我一直那样,找到解决我问题的方法,因为我确信我不是第一个碰到这个问题,但我尝试过的所有解决方案都没有用。也许是因为我使用的ASP.NET身份版本(v 2.2.1)需要一个与我找到的不同的解决方案,或者还有我不熟悉的概念。

基本上,我正在尝试构建的正是IdentityUserRole类具有不同含义的内容。我想使用DataAnnotations而不是the method they used来构建它。虽然我很欣赏其他解决方案和做同样事情的方法,而且我正在开发一个真正的项目,但我喜欢学习,至少想学习如何使用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'IdentityUserLogins'基于没有定义键的类型'IdentityUserLogin'。

     

IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于类型'IdentityUserRole',没有定义键。

问题(S)

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

更新#1

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

1 个答案:

答案 0 :(得分:0)

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