EF 代码第一个 1 对 1 关系错误

EF Code first 1 to 1 relationship error

我有两个 classes:

主要class:

public class CCourseDetailModel
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int CourseDetailId { get; set; }

    [ForeignKey("CourseOutcomes")]
    public int CourseOutcomesId { get; set; }

    public virtual CACourseOutcomesModel CourseOutcomes { get; set; }
}

依赖 class:

public class CACourseOutcomesModel
{
    [Key, ForeignKey("CourseDetail")]
    public int CourseOutcomesId { get; set; }

    [Required]
    public virtual CCourseDetailModel CourseDetail { get; set; }
}

我有 10 个左右相似的 classes,一对一的关系工作正常。这是唯一给我以下错误的错误:

CACourseOutcomesModel_CourseDetail_Target: : Multiplicity is not valid in Role 'CACourseOutcomesModel_CourseDetail_Target' in relationship 'CACourseOutcomesModel_CourseDetail'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be ''.*

知道我哪里出错了吗?请需要一双新眼睛。谢谢!

在一对一的关系中,一端必须是主要的,另一端必须是从属的,所以你不能在双方都有 FK 属性。删除主体 (CCourseDetailModel) 中的 FK 属性,在 CACourseOutcomesModel 中您不需要使用 Required 属性。使用 ForeignKey 属性,您已经在告诉 EF 谁是依赖端。

在 Fluent Api 中将是:

modelBuilder.Entity<CACourseOutcomesModel>()
            .HasRequired(p => p.CourseDetail)
            .WithOptional(p => p.CourseOutcomes);

所以你的模型应该是这样的:

public class CCourseDetailModel
{
    [Key]
    //[DatabaseGenerated(DatabaseGeneratedOption.Identity)] don't need this, it's the configuration by default.
    public int CourseDetailId { get; set; }

    public virtual CACourseOutcomesModel CourseOutcomes { get; set; }
}

public class CACourseOutcomesModel
{
    [Key, ForeignKey("CourseDetail")]
    public int CourseOutcomesId { get; set; }

    public virtual CCourseDetailModel CourseDetail { get; set; }
}