【问题标题】:Entity Framework Core code-first approach one to many relationship returns nullEntity Framework Core 代码优先方法一对多关系返回 null
【发布时间】:2019-05-26 05:00:27
【问题描述】:

我是 Entity Framework Core 的新手,在我的代码中我有许多 Questions 类对象,以及这些问题的选项列表。我的Choices 查询列表总是返回 Null。

这是我的课程:

public class Questions
{
    [Key]
    public int QuestionID { get; set; }
    public string  Question { get; set; }

    public ICollection<Choices> choices { get; set; }
}

public class Choices
{
    [Key]
    public int ChoicesId { get; set; }
    public int QuestionId { get; set; }
    public Questions questions  { get; set; }
    public string Choice { get; set; }
}

public class SqlUserRepository : IUserRepository
{
    private readonly AppDbContext context;

    public SqlUserRepository(AppDbContext context)
    {
        this.context = context;
    }

    public List<Questions> getAllQuestions()
    {
        return context.questions.ToList();
    }
}

我收到了这个 O/p。选择总是返回 null

[
    { "questionID":1, "question":"which is your fav.heroien", "choices":null },
    { "questionID":2, "question":"which is your fav.hero", "choices":null  } 
]

我期待这个输出

[{"questionID":1,"question":"which is your fav.heroien","choices":[{"choicesId":5,"questionId":1,"questions":null,"choice":"kajol Agarwal"},{"choicesId":6,"questionId":1,"questions":null,"choice":"Thammanna Bhatia"},{"choicesId":7,"questionId":1,"questions":null,"choice":"Anushka Shetty"},{"choicesId":8,"questionId":1,"questions":null,"choice":"Keerthi Suresh"}]},{"questionID":2,"question":"which is your fav.hero","choices":[{"choicesId":1,"questionId":2,"questions":null,"choice":"upendera"},{"choicesId":2,"questionId":2,"questions":null,"choice":"real star"},{"choicesId":3,"questionId":2,"questions":null,"choice":"Super star"},{"choicesId":4,"questionId":2,"questions":null,"choice":"Only star"}]}]

【问题讨论】:

  • 尝试使用Include() 也直接加载选项?

标签: c# asp.net-core entity-framework-core


【解决方案1】:

根据EF Core-Loading Related Data 文档,您必须使用.Include 来加载相关数据,如下所示:

public List<Questions> getAllQuestions()
{
    return context.questions.Include(q => q.choices).ToList();
}

【讨论】:

    【解决方案2】:
    public List<Questions> getAllQuestions()
      {
        return context.questions.Include(q => q.choices).ToList();
      }
    

    Include() 允许您指示应从数据库中读取哪些相关实体作为同一查询的一部分。

    调用 Include("Choices") 的最终语句可能如下所示:

    SELECT *
    FROM questions JOIN Choices ON questions.Id = Choices.questionsId;
    

    https://stackoverflow.com/a/26661930/8006943

    【讨论】:

    • 返回无效的json格式[{"questionID":1,"question":"which is your fav.heroien","choices":[{"choicesId":5,"questionId":1
    • 我期待这个输出[{"questionID":1,"question":"which is your fav.heroien","choices":[{"choicesId":5,"questionId":1,"questions":null,"choice":"kajol Agarwal"},{"choicesId":6,"questionId":1,"questions":null,"choice":"Thammanna Bhatia"},{"choicesId":7,"questionId":1,"questions":null,"choice":"Anushka Shetty"},{"choicesId":8,"questionId":1,"questions":null,"choice":"Keerthi Suresh"}]},{"questionID":2,"question":"which is your fav.hero","choices":[{"choicesId":1,"questionId":2,"questions":null,"choice":"upendera"},{"choicesId":4,"questionId":2,"questions":null,"choice":"Only star"}]}]
    • 您需要返回几个选择?如果是,请阅读此learnentityframeworkcore.com/configuration/…
    【解决方案3】:

    如何使用代码优先方法和关系数据构建您的应用程序,link 将逐步指导您应用代码优先方法。

    【讨论】:

      猜你喜欢
      • 2014-08-12
      • 1970-01-01
      • 1970-01-01
      • 2015-08-08
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 2017-05-05
      • 2020-04-29
      相关资源
      最近更新 更多