2012-03-11 10 views
1

hereでEFコードファーストを使用してグラフをデータベースに保存しようとしています。EFコードでグラフを保存する最初に

私は、隣接ノードのコレクションとプロパティを定義した:

public class Node { 
    public int NodeId { get; set; } 
    public string NodeName { get; set; } 
    public ICollection<Node> Nodes { get; set; } 
} 

が、EFは、このモデルのために一つだけのテーブル生成:多対多の関係を生成するために、EFを強制する方法

dbo.Nodes 
    NodeId (PK, int, not null) 
    NodeName (nvarchar(max), null) 
    Node_NodeId (FK, int, null) 

を?

グラフをデータベースに保存する方法はありますか?

答えて

2

クラスモデルは、Nodeにノードのコレクションが1つあり、生成されたテーブルで完全に対応できることを表しています。多対多が必要な場合は、計画について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")); 
    } 
} 

はこれを試してみてください。

conNodeContextインスタンスです)、結果が好きかどうかを確認してください。

関連する問題