Entity Framework: Why is a property of type array of objects not persisted to DB?

StackOverflow https://stackoverflow.com/questions/23646461

  •  22-07-2023
  •  | 
  •  

سؤال

I have two entities where one has a one to many relationship to the other. Example:

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; }
}

Using EF6 Code First I've setup this simple 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; }
}

What I end up with in the DB are two similarly structured tables (int PK column and varchar column) and no representation of the "one Question has many Answers" relationship that I intended with the Question.Answers property.

Why doesn't EF Code First map the relationship and how can I fix this?

هل كانت مفيدة؟

المحلول

Entity Framework doesn't support mapping navigation properties of bare Array types. The property has to be of Type that implements the ICollection<T> interface in order to be mapped.

Try to change your code as follows:

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

And when initializing Answers, set it to a HashSet or List:

this.Answers = new List<Answer>();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top