使表ID成为自己的外键实体框架

时间:2018-11-21 09:41:14

标签: .net entity-framework asp.net-core-2.0

我想知道是否可以创建一个带有ID,标签和引用表ID的外键的表。 下面是我要执行的操作示例,但是由于public virtual RubricFo不能被自身调用而无法正常工作。

public class RubricFO
{
   [Key, Required]
   public int IdRubricFO { get; set; }

   [MaxLength(250)]
   public string LabelRubricFO { get; set; }

   public bool IsActif { get; set; }

   public int RankDisplay { get; set; }

   [ForeignKey("IdRubricFO")]
   public int IdRubricFO_Fk { get; set; }
   public virtual RubricFO RubricFO { get; set; }

   public int IdStructure { get; set; }

   [ForeignKey("IdStructure")]
   public virtual Structures Structures { get; set; }
}

我不知道我是否足够清楚,如果您需要其他信息,请随时询问。

1 个答案:

答案 0 :(得分:2)

是的,有可能。如果您想要一个Tree结构,则可以看到此结构,其中Tree的每个节点都具有零个或多个SubNodes,如果它是顶部节点则没有ParentNode,如果它是一个顶部ParentNode SubNode

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;}
}

我非常确定,对于实体框架来说,这足以理解关系。

如果没有,您可以在DbContext中使用fluent API告知实体框架有关模型的信息

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?,零值可能意味着没有父母。