【问题标题】:ASP.NET MVC Code First Migration - Model with 2 Primary KeysASP.NET MVC 代码优先迁移 - 具有 2 个主键的模型
【发布时间】:2018-09-05 13:34:24
【问题描述】:

我想在我的数据库中创建一个类似于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 值应该是有效的导航属性名称。

【问题讨论】:

标签: c# asp.net asp.net-mvc entity-framework-migrations


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多