EF Code First 一对一关系错误

3

I have two classes:

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

依赖类:

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”中,角色“CACourseOutcomesModel_CourseDetail_Target”的多重性无效。因为从属角色属性不是关键属性,所以从属角色的上限必须为'1'。
请问我错在哪里?需要您的帮助。谢谢!
1个回答

4
在一对一关系中,一个端点必须是主要的,另一个端点必须是从属的,因此你不能在两个端点上都有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; }
}

谢谢octavioccl!这个很好用,但我想知道是否可以在主模型中保留[ForeignKey]标签,以便我可以使用从属ID。原因是,假设我已经知道了从属类的外键。我不想为了将其链接到主类而不必要地调用整个从属类的数据库,我只想添加从属类的FK ID。希望我表述清楚了。有什么可能性吗? - Norman Bentley
实际上,在一对一的关系中,我认为我上面提到的例子很少发生。我通常在一对多的情况下会遇到这些问题。谢谢伙计! - Norman Bentley
不用谢,你要求的以上内容确实是可能实现的,但你需要创建两个关系而不是一个,因此两个实体之间并不真正相关联,就像你说的一样,你应该始终先创建主体。 - ocuenca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接