。私はGraphElements
のセットを保持しているGraph
を持っています。私のGraph
は、Edges
,Nodes
およびLoads
で構成され、すべて異なる要素です。
例えば、各ノードは、その近隣ノードを知る必要があります。したがって、NeigborNodes
-Listが必要です。他の機能については、 -Listも知っておく必要があります。
class Graph
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<GraphElement> GraphElements { get; set; }
}
[Table("GraphElements")]
abstract class GraphElement
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Graph Graph { get; set; }
}
[Table("Nodes")]
class Node : GraphElement
{
public virtual List<Node> NeighborNodes { get; set; }
public virtual List<GraphElement> ConnectedElements { get; set; }
}
[Table("Edges")]
class Edge : GraphElement
{
public virtual Node From { get; set; }
public virtual Node To { get; set; }
}
[Table("Loads")]
class Load : GraphElement
{
public virtual Node From { get; set; }
}
私のモデル構成は、このような瞬間を見ていますが、もちろん動作しません。 (私はタイプ(TPT)アプローチあたり表で働いています。)
public class ModelConfiguration
{
private static void ConfigureGridDataCollectionEntity(DbModelBuilder modelBuilder)
{
// Graph
modelBuilder.Entity<Graph>().ToTable("Base.GraphTable")
.HasRequired(p => p.GraphElements)
.WithMany()
.WillCascadeOnDelete(true);
// GraphElement
modelBuilder.Entity<GraphElement>()
.HasRequired(p => p.Graph)
.WithMany(graph => graph.GraphElements)
.WillCascadeOnDelete(false);
// Edge
modelBuilder.Entity<Edge>()
.HasOptional(p => p.From)
.WithMany(node => node.ConnectedElements) // Convertion error
.WillCascadeOnDelete(false);
modelBuilder.Entity<Edge>()
.HasOptional(p => p.To)
.WithMany(node => node.ConnectedElements) // Convertion error
.WillCascadeOnDelete(flase);
// Load
modelBuilder.Entity<Load>()
.HasOptional(p => p.From)
.WithMany(node => node.ConnectedElements) // Convertion error
.WillCascadeOnDelete(false);
// Node
// No idea at all...
}
}
私の質問:
私は
NeighborNodes
を保存するために、私のモデル構成や私のエンティティを変更することができますどのように(A)私のデータベースに?(B)
ConnectedElements
をデータベースに保存するには、モデル構成やエンティティを変更するにはどうすればよいですか?
ありがとうございました!