ASP.NET MVC代码优先迁移-具有2个主键的模型

时间:2018-09-05 13:34:24

标签: c# asp.net asp.net-mvc ef-migrations

我想创建一个与数据库中具有以下列的AspNetUserRoles表相似的表:

User_id
Role_id

这些列与用户和角色表相关

如何使用我的模型创建一个?我已经这样尝试过了:

public class AspNetUserRolesExtendedDetails
{
    [Key]
    [Column(Order = 0)]
    public ApplicationUser UserId { get; set; }
    [Key]
    [Column(Order = 1)]
    public AspNetRolesExtendedDetails RoleId { get; set; }
}

但是当我尝试运行迁移时,会出现此错误:

  

AspNetUserRolesExtendedDetails :: EntityType'AspNetUserRolesExtendedDetails'没有定义键。定义此EntityType的键。
  AspNetUserRolesExtendedDetails:EntityType:EntitySet'AspNetUserRolesExtendedDetails'基于未定义键的'AspNetUserRolesExtendedDetails'类型。

如何创建这样的表,以及它的专有名称是什么?

编辑:

当我像这样更新我的模型时:

public class AspNetUserRolesExtendedDetails
{
    [Key]
    [Column(Order = 0)]
    [ForeignKey("AspNetUsers")]
    public ApplicationUser UserId { get; set; }
    [Key]
    [Column(Order = 1)]
    [ForeignKey("AspNetRolesExtendedDetails")]
    public AspNetRolesExtendedDetails RoleId { get; set; }
}

我收到此错误:

  

类型为'App.Models.AspNetUserRolesExtendedDetails'的属性'RoleId'上的ForeignKeyAttribute无效。在从属类型“ App.Models.AspNetUserRolesExtendedDetails”上找不到外键名称“ AspNetRolesExtendedDetails”。名称值应该是用逗号分隔的外键属性名称列表。

更新:

    [Key]
    [Column(Order = 0)]
    [ForeignKey("Id")]
    public String UserId { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
    [Key]
    [Column(Order = 1)]
    [ForeignKey("Id")]
    public String RoleId { get; set; }
    public virtual AspNetRolesExtendedDetails AspNetRolesExtendedDetails { get; set; }

这是我现在拥有的,但是出现此错误:

  

类型'App.AspNetUserRolesExtendedDetails'上属性'UserId'上的ForeignKeyAttribute无效。在依赖类型“ App.Models.AspNetUserRolesExtendedDetails”上找不到导航属性“ Id”。名称值应为有效的导航属性名称。

1 个答案:

答案 0 :(得分:0)

所以我设法找到了解决方案。由于某种原因,直接复制对象名称对我有效。

public class AspNetUserRolesExtendedDetails
{
    [Key]
    [Column(Order = 0)]
    [ForeignKey("ApplicationUser")]
    public String UserId { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }
    [Key]
    [Column(Order = 1)]
    [ForeignKey("AspNetRolesExtendedDetails")]
    public String RoleId { get; set; }
    public virtual AspNetRolesExtendedDetails AspNetRolesExtendedDetails { get; set; }
}