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

uri*_*rig 6 orm entity-framework

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

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; }
}
Run Code Online (Sandbox Code Playgroud)

使用EF6 Code First我已经设置了这个简单的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; }
}
Run Code Online (Sandbox Code Playgroud)

我最终在数据库中得到的是两个结构相似的表(int PK列和varchar列),并且没有表示"一个问题有很多答案"关系,我打算用Question.Answers属性.

为什么EF Code First没有映射关系,我该如何解决这个问题呢?

hai*_*770 6

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

尝试更改您的代码,如下所示:

public class Question
{
    public int Id { get; set; }
    public string Text { get; set; }
    public virtual ICollection<Answer> Answers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

初始化时Answers,将其设置为HashSetList:

this.Answers = new List<Answer>();
Run Code Online (Sandbox Code Playgroud)