必须显式配置此关联的主体端

本文关键字:关联 主体 配置 | 更新日期: 2023-09-27 18:05:37

我试图通过代码优先的方法创建表。我有两个表"CrimeReport"answers"ReportDescription",它们是一一对应的关系。

[Table("CrimeReport")]
    public class CrimeReport
    {
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        [Key]
         public  int  ImageId { get; set; }
         public virtual ReportDescription ReportDescription { get; set; }
    }

    [Table("ReportDescription")]
    public class ReportDescription
    {

        [Key]
        public int ImageId { get; set; }
        public virtual CrimeReport CrimeReport { get; set; }
    }

当我在包控制台中编写命令"add-migration try"时,我得到了一个异常。

无法确定类型"codefirst.Models"之间关联的主要结束。ReportDescription'和'codefirst.Models.CrimeReport'。此关联的主体端必须使用关系流畅API或数据注释显式配置。

必须显式配置此关联的主体端

您需要用[Required]属性标记ReportDescription.CrimeReport:

[Table("ReportDescription")]
public class ReportDescription
{
    [Key]
    public int ImageId { get; set; }
    [Required]
    public virtual CrimeReport CrimeReport { get; set; }
}

否则EF无法判断CrimeReportReportDescriptionrequired:required关系,共享ImageId作为key。

等价的FluentAPI映射将是:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ReportDescription>()
        .HasRequired(x => x.CrimeReport)
        .WithRequiredDependent(x => x.ReportDescription);
}