我有一个使用 .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);
但是。版本升级后,包含不起作用。不工作是指返回的值不包括答案。仅返回主实体,子实体中的所有字段均为空。
我不是 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();
}
错误:
using System.Data.Entity;
using Microsoft.EntityFrameworkCore;