C# 实体框架中的父子链接

C# 实体框架中的父子链接,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在创建一个类似于任务列表的系统web应用程序 用户可以创建任务 用户可以在任何任务中创建任务 然后,用户可以在该任务中创建任务 用户可以查看第一个任务并查看链接到该任务的所有任务 我建立了一个简单的父母和孩子的关系。一旦我通过了第一关,我发现这是不可能的 我希望能够查看原始父任务以及其中的所有其他父任务和子任务 到目前为止,一个任务有一个任务的Icollection 我希望能够查看原始父类的所有同级 modelBuilder.Entity<Task>()

我正在创建一个类似于任务列表的系统web应用程序

  • 用户可以创建任务
  • 用户可以在任何任务中创建任务
  • 然后,用户可以在该任务中创建任务
  • 用户可以查看第一个任务并查看链接到该任务的所有任务
我建立了一个简单的父母和孩子的关系。一旦我通过了第一关,我发现这是不可能的

我希望能够查看原始父任务以及其中的所有其他父任务和子任务

到目前为止,一个任务有一个任务的Icollection

我希望能够查看原始父类的所有同级

   modelBuilder.Entity<Task>()
            .HasMany(x => x.Children)
            .WithOptional()
            .HasForeignKey(x => x.ParentID);
modelBuilder.Entity()
.HasMany(x=>x.Children)
.WithOptional()
.HasForeignKey(x=>x.ParentID);

查询数据库时,请执行以下操作:

var tasks = from t in db.Tasks.Include("Parent")
            where t.Id //... your logic here
            select t;
您需要扩展任务类以包含父属性:

public virtual Task Parent { get; set; }
然后映射关系:

modelBuilder.Entity<Task>()
            .HasOptional(x => x.Parent)
            .WithMany(x => x.Children)
            .HasForeignKey(x => x.ParentID);
modelBuilder.Entity()
.has可选(x=>x.Parent)
.有许多(x=>x个孩子)
.HasForeignKey(x=>x.ParentID)
上面的查询告诉EF为每个返回的任务带来父任务


希望这有帮助。

一个解决方案可能是必须使用外键。一个外键是IDRootTask,另一个外键是IDParentTask

第一个IDRootTask是第一个任务的ID,因此可以获取组中的所有任务。第二个FK,IDRootParent可用于仅获取父任务的任务。这样,您就不需要递归函数来获取父对象和父对象的父对象


另一个选项如果你希望所有的任务都是确定的任务,那么你需要在数据库中存储一棵树,这样你就可以知道所有的后代或祖先。

这个问题很模糊。您是在问应该如何设置数据库/实体结构吗?我猜您应该先编写代码。你能给我们看一下你的类结构和上下文吗?我如何查询数据库以获得一个包含其父任务中的任务的任务等等。@BenFelda我已经添加了类似ModelBuilder的@BenFelda说,你必须在你的问题中包含类结构和上下文。