【发布时间】:2014-02-05 09:50:06
【问题描述】:
我希望使用 Entity Framework 6 构建一个类似于“Microsoft Project”的数据层次结构。本质上,我需要一个可以跟踪任务的不同细节级别的数据结构。因此,我希望构建一个结构来支持类似以下内容的结构,其中任务可以有子任务,子任务可以有子任务等等,但它并不总是,也不总是相同的深度。
Task
-Task
--Task
--Task
--Task
---Task
---Task
--Task
这里的许多其他帖子都提到,实体框架的树层次结构非常困难,但我无法找到任何信息来表明它是否自 EF4 以来有所改进并且现在不那么困难了。
我有一个如下所示的任务模型,但是当我尝试生成数据库时,它没有按预期生成:
public class Task
{
public int ID { get; set; }
public string Name { get; set; }
public virtual Task Parent { get; set; }
public virtual ICollection<Task> Children { get; set; }
public virtual ICollection<Task> Predecessors { get; set; }
public virtual ICollection<Task> Successors { get; set; }
}
我期待一个数据库,其中有一个 Tasks 表以及 Children、Predecessors 和 Successors 表,但我最终得到的只是一个具有如下属性的 Tasks 表:
ID = c.Int(nullable: false, identity: true),
Name = c.String(),
Task_ID = c.Int(),
Parent_ID = c.Int(),
Task_ID1 = c.Int(),
Task_ID2 = c.Int(),
此外,我希望能够将多个不同的数据与这些任务中的每一个相关联。所以假设我的任务是“建立一个表”,我正在跟踪 PersonA 与 PersonB 相比需要多长时间来构建它。将该数据与该任务相关联的最佳方法是什么?我应该使用如下的 TaskData 对象吗:
public class TaskData
{
public int ID { get; set; }
public int CompletionTime { get; set; }
public virtual Task Task { get; set; }
public virtual Person Person { get; set; }
}
为了使事情更加复杂,我还需要使同一个 Task 对象可跨多个不同的 Task 重用。例如“Build Playground A”可能有大小为 1 的子任务“Build a Table”,而“Build Playground B”可能有大小为 2 的子任务“Build a Table”,但我只希望“Build a Table”任务在 DB 中存在一次然后通过TaskData对象关联数据。
我们将非常感谢您在确定如何解决上述任何问题时提供提示或帮助。
【问题讨论】:
标签: c# entity-framework asp.net-web-api entity-framework-6