我想知道是否可以创建一个带有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; }
}
我不知道我是否足够清楚,如果您需要其他信息,请随时询问。
答案 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?
,零值可能意味着没有父母。