Да, это возможно.Вы видите это, если вам нужна древовидная структура, где каждый узел дерева имеет ноль или более SubNodes
, нет ParentNode
, если это верхний узел, или один ParentNode
, если это SubNode
. * 1005.*
class Node
{
public int Id {get; set;}
// every Node has zero or more subNodes:
public virtual ICollection<Node> SubNodes {get; set;}
// every Node is the subNode of zero or one ParentNode, using foreign key
public int? ParentId {get; set;} // null if it is a Top Node
public virtual Node Parent {get; set;}
}
Я почти уверен, что этой информации достаточно для структуры сущностей, чтобы понять отношения.
Если нет, вы можете использовать свободный API в вашем DbContext
, чтобы сообщить структуре сущностей о модели
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// build table Nodes:
modelBuilder.Entity<Node>()
.HasKey(node => node.Id) // not needed, I followed the conventions
.HasOptional(node => node.Parent) // every node table has an optional Parent
.WithMany(node => node.SubNodes) // every Parent Node has zero or more SubNodes
.HasForeignKey(node => node.ParentId); // the foreign key to the parent node
Хорошее упражнение: попробуйте int ParentId
вместо int?
, нользначение может означать, что нет родителя.