Я новичок в инфраструктуре сущности и пытаюсь сохранить следующую модель в базе данных. Я смотрел этот урок. Я хочу сначала сохранить следующую модель базы данных, используя код, но я не мог заставить ее сохранить эту рекурсивную структуру. Он хранит только начальный корневой узел.
Моя модель выглядит так:
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();
}
только корневой узел сохраняется в базе данных. Я попытался дать каждому подтипу собственный ключ, но без успеха. Как я могу хранить эту модель в базе данных, любые идеи? Возможно ли это?
Определили ли вы отношение родитель-ребенок в инициализаторе контекста db.
Инициализатор должен иметь такое же:
modelBuilder.Entity<Node>()
.HasMany(o => o.Nodes)
.WithOptional() // or .WithRequired()
.Map(m => m.MapKey("ParentNodeId"));