您的班級模型表示Node
有一個節點集合,可以完全適應生成的表格。如果你想要多對多的話,你必須告訴EF你的計劃。
一兩件事你可以做的就是讓家長和孩子集合:
public class Node
{
public int Id { get; set; }
public string NodeName { get; set; }
public ICollection<Node> ParentNodes { get; set; }
public ICollection<Node> ChildNodes { get; set; }
}
EF將創建一個連接表如下:
[dbo].[NodeNodes]
[Node_Id] [int] NOT NULL,
[Node_Id1] [int] NOT NULL
如果你願意,你可以列更有意義的名稱此操作:
class NodeContext : DbContext
{
public DbSet<Node> Nodes { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Node>()
.HasMany(n => n.ParentNodes)
.WithMany(n => n.ChildNodes)
.Map(c => c.MapLeftKey("ChildNodeId")
.MapRightKey("ParentNodeId"));
}
}
試試這個:
var root = new Node { NodeName = "Root" };
root.ParentNodes = new List<Node> { new Node { NodeName = "Par1" }, new Node { NodeName = "Par2" } };
root.ChildNodes = new List<Node> { new Node { NodeName = "Ch1" }, new Node { NodeName = "Ch2" } };
con.Nodes.Add(root);
con.SaveChanges();
(其中con
是NodeContext
實例)並查看您是否喜歡結果。