从版本 3.1.2 升级到 5.0.3 后,实体框架核心 Include() 不起作用

Thu*_*olt 7 c# entity-framework entity-framework-core .net-core .net-5

我有一个使用 .net core 3.1 运行的项目。升级到 .net 5 并将实体框架核心升级到 5.0.3 后,包含不再起作用。

我有这些课程

public class Question
{
    [Key]
    public Guid Id { get; set; }
    public string QuestionCode { get; set; }
    [ForeignKey("AnswersId")]
    public Answer Answers { get; set; }
}

public class Answer
{
    [Key]
    public Guid Id { get; set; }
    public string Answers { get; set; }
    public int Score { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

该关系定义如下:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Question>()
        .HasOne(q => q.Answers);
}
Run Code Online (Sandbox Code Playgroud)

以及这个简单的 LINQ:

return _context.Questions
        .Include(q => q.Answers)
        .FirstOrDefault(s => s.Id == id);
Run Code Online (Sandbox Code Playgroud)

然而。版本升级后,包含不起作用。不工作是指返回的值不包括答案。仅返回主实体,子实体中的所有字段均为空。

dgl*_*ano 8

我不能 100% 确定这是否是问题所在,因为您说它之前工作正常,但可能是您的关系配置不正确,因为它缺少对或 的OnModelCreating调用是正确的。WithOneWithMany

来自文档

调用此方法后,您应该链接调用 WithMany(String) 或 WithOne(String) 以完全配置关系。仅调用此方法而不进行链式调用将不会产生有效的关系。

EF 5 中存在与所需导航属性的语义相关的重大更改,从主体(问题)到依赖项(答案),可能是升级库后错误行为的解释。

那么让我们尝试一下...尝试像这样配置您的关系:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Question>()
        .HasOne(q => q.Answers);
        .WithOne()
        .IsRequired();
}
Run Code Online (Sandbox Code Playgroud)


小智 8

就我而言,我在编译时使用错误,并且没有运行时错误 - 与升级无关。

错误的:
using System.Data.Entity;

固定为:
using Microsoft.EntityFrameworkCore;