我使用 Entity Framework 6 和 Code First,并且有一个具有以下结构的表:
public class Item
{
[Key]
public int ItemId { get; set; }
[Required]
[MaxLength(255)]
public string Name { get; set; }}
public Item Parent { get; set; }
public virtual List<Item> Children { get; set; }
}
我想知道是否可以对数据库进行一次查询/访问,所有Items
穿过我的树直到根部,提供itemId
作为论证。
例如给我所有的父母ItemId
55 直到找不到父母。
您无法使用任何健全的代码让所有父母参与一次旅行。
但是你可以这样做:https://stackoverflow.com/a/11565855/304832 https://stackoverflow.com/a/11565855/304832
通过稍微修改您的实体,您可以添加 2 个派生集合:
public class Item
{
[Key]
public int ItemId { get; set; }
[Required]
[MaxLength(255)]
public string Name { get; set; }}
public virtual Item Parent { get; set; } // be sure to make this virtual
public virtual List<Item> Children { get; set; }
public virtual ICollection<ItemNode> Ancestors { get; set; }
public virtual ICollection<ItemNode> Offspring { get; set; }
}
不过,您确实需要引入一个新实体才能完成这项工作,如下所示:
public class ItemNode
{
public int AncestorId { get; set; }
public virtual Item Ancestor { get; set; }
public int OffspringId { get; set; }
public virtual Item Offspring { get; set; }
public int Separation { get; set; } // optional
}
现在,如果你想要
从 ItemId 55 开始的所有父项,直到找不到父项
...你可以这样做:
IEnumerable<Item> allParentsFrom55 = dbContext.Set<Item>()
.Find(55).Ancestors.Select(x => x.Ancestor);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)