实体框架中的父和子链接
本文关键字:链接 框架 实体 | 更新日期: 2023-09-27 18:10:07
我正在创建一个类似于任务列表的系统web应用程序。
- 用户可以创建任务
- 用户可以在任何Task中创建Task。
- 用户可以在任务 中创建任务
- 用户可以查看第一个任务,并查看与该任务链接的所有任务。
我已经创建了一个简单的父子关系。一旦我通过了第一关,我发现它是不可能的?
我希望能够查看原始父任务以及其中的所有其他父和子任务。
到目前为止,Task有一个任务集合。
我想要做的是查看原始父类的所有兄弟类。
modelBuilder.Entity<Task>()
.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;
,你需要扩展你的Task类来包含父属性:
public virtual Task Parent { get; set; }
,然后映射关系:
modelBuilder.Entity<Task>()
.HasOptional(x => x.Parent)
.WithMany(x => x.Children)
.HasForeignKey(x => x.ParentID);
上面的查询告诉EF为每个返回的Task带来父Task。
一种解决方案可能是使用两个外键。一个外键是IDRootTask,另一个是IDParentTask。
第一个IDRootTask是第一个任务的ID,因此要获取该组的所有任务。第二个FK, IDRootParent可以用来获取父任务的任务。这样,就不需要递归函数来获取父元素和父元素的父元素。
另一种选择,如果你想要所有的任务都低于一个确定的任务,那么你需要在数据库中存储一个树,这允许你知道所有的后代或所有的祖先。