我有两个实体,其中一个实体与另一个实体有一对多的关系。例如:
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映射关系以及如何解决这个问题?
答案 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
时,请将其设为HashSet
或List
:
this.Answers = new List<Answer>();