当您阅读有关实现HierarchyId 的博客时,您必须非常清楚 EF 6 与 EF Core 6。一些博客文章不会具体说明两者,解决方案也不相同。我认为我的一些问题是我缺乏经验,因此我从 EF 和一些来自 EF Core 的解决方案中获得了一些解决方案。
我正在开发 .Net 6、EF Core 6 和 Sql Server(最新版本)。
你应该已经有了
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.SqlServer
您需要的唯一附加包是EntityFramworkCore.SqlServer.HierarchyId。当前版本是 3.0.1。
当您创建数据库模型时添加using Microsoft.EntityFrameworkCore; 这是我的模型的示例,您将在底部看到HierarchyId。
public class TaskModel
{
[Key]
public int Id { get; set; }
[Required]
public int ProjectId { get; set; }
[Required]
public string TaskName { get; set; }
public string TaskDescription { get; set; }
public DateTime? EstimatedStartDate { get; set; }
public DateTime? EstimatedEndDate { get; set; }
public DateTime? ActualStartDate { get; set; }
public DateTime? ActualEndDate { get; set; }
public ICollection<TaskStatusModel> TaskStatus { get; set; }
public ICollection<TaskTimeModel> TaskTime { get; set; }
public ICollection<TaskResourceModel> TaskResource { get; set; }
public HierarchyId Level { get; set; }
}
当您运行 Add-Migration Update-Database 时,它将按预期创建具有 HierarchyId 类型的表。
我注意到的一个奇怪行为(或错误)是 HierarchyId 在构建之前或构建期间会出现错误。您还会看到 VS 的列表中缺少 EntityFramworkCore.SqlServer.HierarchyId 包。从阅读来看,可能是兼容性问题。我不知道。
我发现你只是再次重建,它会自行解决。这往往与成功的构建交替发生。我还没有找到解决方案。