我正在尝试通过代码优先方法创建表。我有两张桌子" CrimeReport"和" 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或数据注释显式配置此关联的主要结尾。'
答案 0 :(得分:1)
您需要使用ReportDescription.CrimeReport
属性标记[Required]
:
[Table("ReportDescription")]
public class ReportDescription
{
[Key]
public int ImageId { get; set; }
[Required]
public virtual CrimeReport CrimeReport { get; set; }
}
否则EF无法确定CrimeReport
和ReportDescription
是必需:必需关系,并将ImageId
作为密钥分享。
等效的FluentAPI映射将是:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ReportDescription>()
.HasRequired(x => x.CrimeReport)
.WithRequiredDependent(x => x.ReportDescription);
}