从版本 3.1.2 升级到 5.0.3 后,Entity Framework 核心 Include() 不起作用

问题描述 投票:0回答:2

我有一个使用 .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; }
}

关系定义如下:

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

还有这个简单的 LINQ:

return _context.Questions
        .Include(q => q.Answers)
        .FirstOrDefault(s => s.Id == id);

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

c# entity-framework .net-core entity-framework-core .net-5
2个回答
8
投票

我不是 100% 确定这是否是问题所在,因为您之前说过它工作正常,但可能是您的关系在

OnModelCreating
中配置不正确,因为它缺少对
WithOne
的调用或者
WithMany
是正确的。

来自文档

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

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

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

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

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

错误:


using System.Data.Entity;


修复:


using Microsoft.EntityFrameworkCore;


    

© www.soinside.com 2019 - 2024. All rights reserved.