实体框架代码首先将表连接在一起的外键问题

时间:2014-07-15 14:22:25

标签: c# entity-framework

3个表格(为简洁起见,仅显示相关栏目);

[QuestionSet]
<int>       Id (Pk)
...

[Link_Set_to_Question]
<int> Id (pk)
<int> fk_Question <-- Foreign key to Questions Table
<int> fk_SetId <-- Foreign key to Questions Table
<int> DisplayOrder
...

[Questions]
<int> Id (Pk)
...

我的实体模特。

public class QuestionSet
{
    [Key]
    public int Id { get; set; }
    ...

    [ForeignKey("fk_SetId")]
    public virtual ICollection<Link_Set_to_Question> QuestionSet { get; set; }

    public QuestionSetDetails()
    {
        this.QuestionSet = new List<Link_Set_to_Question>();                                  
    }
}

public class Link_Set_to_Question
{
    [Key]
    public int Id { get; set; }
    public int fk_SetId { get; set; }
    public int fk_QuestionId { get; set; }

    [ForeignKey("Id")]
    public virtual Questions Question { get; set; }

    public Relations_Questions_To_Sets()
    {
        this.Question = new Questions();
    }
}

当我添加第二个类时,问题条目全部为空。 大概是因为它试图将问题的ID映射到Link_Set_to_Question的主键而不是fk_QuestionId。

那么,有没有一种方法来构建我的对象/属性以便这可以工作,或者我是否需要深入研究模型构建器。 (在这种情况下,我如何定义它以使Set具有许多链接对象,并且每个链接对象都有一个问题?)

1 个答案:

答案 0 :(得分:1)

 modelBuilder
            .Entity<QuestionSet>()
            .HasMany<Link_Set_to_Question>(set => set.QuestionSet)
            .WithRequired(linkSet => linkSet.Question)
            .HasForeignKey(linkSet => linkSet.fk_QuestionId)
            .WillCascadeOnDelete(true);