实体框架:为什么类型数组的属性不会持久保存到DB?

时间:2014-05-14 05:40:27

标签: entity-framework orm

我有两个实体,其中一个实体与另一个实体有一对多的关系。例如:

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public Answer[] Answers { get; set; }
}

public class Answer
{
    public int Id {get; set; }
    public string Text { get; set; }
}

首先使用EF6 Code我已经设置了这个简单的DbContext:

public class MyContext : DbContext
{
    public MyContext()
    {
        Database.SetInitializer<MyContext>(new DropCreateDatabaseAlways<MyContext>());
    }

    public DbSet<Question> Questions { get; set; }

    public DbSet<Answer> Answers { get; set; }
}

我在DB中最终得到的是两个结构相似的表(int PK列和varchar列),并且没有表示&#34;一个问题有很多答案&#34;我打算用Question.Answers属性建立的关系。

为什么没有EF Code First映射关系以及如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

实体框架不支持裸阵列类型的映射导航属性。该属性必须是实现ICollection<T>接口才能映射的Type。

尝试按如下方式更改代码:

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}

初始化Answers时,请将其设为HashSetList

this.Answers = new List<Answer>();