【问题标题】:EF Code first 1 to 1 relationship errorEF Code first 1对1关系错误
【发布时间】:2016-01-04 21:06:36
【问题描述】:

我有两个班级:

主类:

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: : 多重性在角色“CACourseOutcomesModel_CourseDetail_Target”中无效 关系“CACourseOutcomesModel_CourseDetail”。因为 Dependent Role 属性不是关键属性,上限 从属角色的多重性必须是''。*

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢 octavioccl!这很好用,但我想知道是否可以将 [ForeignKey] 标记保留在主体模型中,以便可以使用从属 ID。原因是,假设我已经知道依赖类的外键。我不想不必要地为整个依赖类调用数据库,以便我可以将它链接到主体类,我只想添加依赖类的 FK id。希望我足够清楚。任何可能性
    • 其实在一对一的关系中,我认为我上面给出的例子很少会发生。我通常会以一对多的方式遇到这些问题。谢谢老哥!
    • 不客气,可以按照你上面的要求做,但是你需要创建两个关系而不是一个,所以两个实体不会真正相关,正如你所说,你应该始终先创建主体。
    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多