我有以下实体:
ProjectGroup.cs
//Parts omitted for brevity
public class ProjectGroup : Entity<int>, IAggregateRoot
{
private HashSet<Project> _projects;
public IReadOnlyCollection<Project> Projects
=> this._projects.ToList().AsReadOnly();
}
Project.cs
//Parts omitted for brevity
public class Project: Entity<int>
{
private HashSet<Task> _backlog;
public IReadOnlyCollection<Task> Backlog
=> this._backlog.ToList().AsReadOnly();
}
Task.cs
//Parts omitted for brevity
public class Task : Entity<int>
{
public TaskDescription Description { get; private set; }
}
TaskDescription.cs
是一个固定值对象,它封装了Task.cs
中感兴趣的属性。
我使用EF Core 3.1和SQL Server具有读/写持久性功能。在Task
的{{1}}集合中为特定的Task
插入新的Project
可以正常工作,并且一切都插入到数据库中。
但是,当我从数据库中读取数据时出现问题。当我通过EF查询特定项目时,如下所示,即使数据库中有记录,ProjectGroup
集合的每个成员的Description
属性也为空。
Task
var projectGroup = await this.All()
.Include(g => g.Projects).ThenInclude(p => p.Backlog).ThenInclude(t => t.Description)
.AsNoTracking()
.FirstOrDefaultAsync(g => g.Id == projectGroupId);
var project = projectGroup.Projects.FirstOrDefault(p => p.Id == projectId);
是this.All()
这是dbContext.Set<ProjectGroup>()
实体的EF配置:
Task
我最初在查询时没有第二个builder
.OwnsOne(t => t.Description, description =>
{
description.WithOwner();
});
,正如我从官方文档中知道的那样,默认情况下会填充拥有类型,但不包含它们,但是由于这种方法不起作用,我认为我会尝试手动包含类型,但无济于事。