外键属性无效?(实体框架代码优先)

本文关键字:代码 框架 实体 属性 无效 | 更新日期: 2023-09-27 18:11:36

我首先使用实体框架代码,并添加了一个类,其中类也必须有另一个类列表,但当我试图通过迁移对数据库进行更新时,我得到这个:

类型为SubscaleScore的属性'SubscaleStatistics'上的ForeignKeyAttribute无效。在从属类型"SubscaleScore"上找不到外键名称"SubscaleStatisticsId"。Name值应该是一个逗号分隔的外键属性名称列表。

我的类是这样的:

public class ExamStatistics : StatisticsData
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    [Required]
    public int TestId { get; set; }
    public IList<SubscaleStatistics> Subscales { get; set; }
}

public class SubscaleStatistics
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int SubscaleStatisticsId { get; set; }
    public int TestId { get; set; }
    public int SubscaleNumber { get; set; }
    public int ExamStatisticsId { get; set; }
    [ForeignKey("ExamStatisticsId")]
    public virtual ExamStatistics ExamStatistics { get; set; }
    public IList<SubscaleScore> SubscaleScores { get; set; }
}

public class SubscaleScore
{
    public int TestId { get; set; }
    public int Subscale { get; set; }
    public double Score { get; set; }
    public int SubscaleId { get; set; }
    [ForeignKey("SubscaleStatisticsId")]
    public virtual SubscaleStatistics SubscaleStatistics { get; set; }
}

我在这里做错了什么?还是我需要提供更多的信息才能知道哪里出了问题?

外键属性无效?(实体框架代码优先)

您需要为SubscaleScore添加一个外键属性。

public int SubscaleStatisticsId { get; set; }

查看教程:外键

外键必须是id而不是对象

试试这样:

public class SubscaleScore
{
    public int TestId { get; set; }
    public int Subscale { get; set; }
    public double Score { get; set; }
    public int SubscaleId { get; set; }
    [ForeignKey("SubscaleStatisticsId")]
    public int SubscaleStatisticsId { get; set; }
    public virtual SubscaleStatistics SubscaleStatistics { get; set; }
}

对所有带有foreignkey

的类做同样的处理