【问题标题】:How do I implement HierarchyId in EF Core 6 in C#如何在 C# 的 EF Core 6 中实现 HierarchyId
【发布时间】:2022-07-14 06:10:24
【问题描述】:

我正在开发一个简单的项目管理系统,需要管理 WBS(基本上是任务层次结构)。我花了几天时间在一个又一个博客中梳理,以弄清楚如何使用 EF Core 和 SQL Server 设置HierarchyId。关于 Db 不支持的类型并转换为 CLR 类型(我认为是),我遇到了很多错误。这促使我尝试在我的数据库上下文文件中进行映射,但都没有奏效。

所以我想分享一个总结,希望它能帮助其他人。

【问题讨论】:

    标签: c# entity-framework-core hierarchyid


    【解决方案1】:

    当您阅读有关实现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 包。从阅读来看,可能是兼容性问题。我不知道。

    我发现你只是再次重建,它会自行解决。这往往与成功的构建交替发生。我还没有找到解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      • 2018-10-24
      • 2021-12-04
      相关资源
      最近更新 更多