繁体   English   中英

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

[英]ASP.NET MVC Code First Migration - Model with 2 Primary Keys

我想在数据库中创建一个类似于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”。 Name值应该是逗号分隔的外键属性名称列表。

更新:

    [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”。 Name值应为有效的导航属性名称。

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

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; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM