0

我正在使用 Visual Studio 2010 .Net4。

我在尝试使用 EF 将映射器配置到数据库时遇到问题。

这是我要映射的类,我正在尝试映射它,以便我可以使用包含语句根据列表中的 Question 对象的 ParentID 属性填充子列表。

public class Question
{
    public int QuestionId { get; set; }
    public int ParentId { get; set; }
    public string QuestionText { get; set; }
    public string Answer { get; set; }

    //recursive list of Questions
    public virtual List<Question> Children {get; set;}
}

这是我配置映射器的尝试

class QuestionConfiguration : EntityTypeConfiguration<Question>
{
    public QuestionConfiguration()
        : base()
    {
        this.HasKey(x => x.QuestionId);

        this.Property(p => p.ParentId)
            .HasColumnName("ParentId");

        this.Property(p => p.QuestionText)
            .HasColumnName("QuestionText");

        this.Property(p => p.Answer)
            .HasColumnName("Answer");

        this.HasMany(w => w.Children)
            .HasForeignKey(w => w.ParentId);

        ToTable("tbl_Questions");
    }
}

我对 EF 和 c# 还很陌生,所以我不确定如何从这里开始。我上面的尝试甚至没有编译。

任何朝着正确方向的帮助或指示都会有很大的帮助。

4

1 回答 1

0

你很接近:

this.HasMany(w => w.Children)
    .WithOptional() // Added this
    .HasForeignKey(w => w.ParentId);

唯一的事情是,我认为 ParentId 应该是 nullable int,因为层次结构的根永远不会有父级。

于 2013-09-17T11:26:28.550 回答