EF Code首先出现1对1关系错误

时间:2016-01-04 21:06:36

标签: c# entity-framework foreign-key-relationship one-to-one

我有两个班级:

主要课程:

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; }
}

依赖类:

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

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

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

  

CACourseOutcomesModel_CourseDetail_Target :: Multiplicity在Role&CACourseOutcomesModel_CourseDetail_Target'在   关系&CACourseOutcomesModel_CourseDetail'。因为   依赖角色属性不是关键属性,即上限   依赖角色的多样性必须是' '。*

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

1 个答案:

答案 0 :(得分:4)

在一对一的关系中,一端必须是委托人而另一端必须依赖,因此双方都不能拥有FK财产。删除主体(CCourseDetailModel)和CACourseOutcomesModel中不需要使用Required属性的FK属性。使用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; }
}