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

时间:2016-10-05 18:18:24

标签: c# .net entity-framework ef-code-first ef-migrations

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

属性' SubscaleStatistics'上的ForeignKeyAttribute在类型SubscaleScore'无效。外键名称' SubscaleStatisticsId'未在依赖类型' SubscaleScore'中找到。 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; }

}

我在这里做错了什么?或者我是否需要提供更多信息才能解决问题?

2 个答案:

答案 0 :(得分:6)

您需要向SubscaleScore添加外键属性。

public int SubscaleStatisticsId { get; set; }

请参阅此处获取教程:foreign keys

答案 1 :(得分:3)

外键必须是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的类执行相同的操作