簡體   English   中英

如何使用實體框架5.0存儲遞歸模型

[英]How to store a recursive model with entity framework 5.0

我是實體框架的新手,正在嘗試將以下模型存儲到數據庫中。 我看了教程。 我想先使用代碼將以下模型存儲到數據庫中,但無法獲取此遞歸結構。 它僅存儲初始根節點。

我的模型如下所示:

public abstract class Node : INode
{
    public int NodeId { get; set; }

    public Node()
    {
        Nodes = new List<INode>();
    }

    public INode ParentNode { get; set; }

    public List<INode> Nodes { get; private set; }

    public string Name { get; set; }
}

以及派生的子類型:

public class Module : Node, IModule
{
}

public class Location: Node, ILocation
{
}

這些接口是:

public interface INode
{
    INode ParentNode { get; set; }

    List<INode> Nodes { get; }

    string Name { get; set; }
}

public interface IModule : INode
{
}

public interface ILocation : INode
{
}

這是我的DbContext:

public class SqlEntityContext : DbContext
{
    public DbSet<Node> Nodes { get; set; }
}

然后,我創建一個包含兩個位置節點的父模塊節點的模型。 如果我嘗試使用此代碼存儲它

using (var db = new SqlEntityContext())
{
    db.SqlSystemNodes.Add(Root as SqlSystemNode);
    db.SaveChanges();
}

只有根節點被存儲到數據庫中。 我試圖給每個子類型自己的密鑰,但沒有成功。 有什么想法,我如何能夠將該模型存儲到數據庫中? 可能嗎?

您是否在數據庫上下文初始化程序中定義了父子關系。

您的初始化程序應具有以下功能:

modelBuilder.Entity<Node>()
    .HasMany(o => o.Nodes)
    .WithOptional() // or .WithRequired()
    .Map(m => m.MapKey("ParentNodeId"));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM