實體在這裏你可以看到我的,我想在我的SQLite數據庫來存儲減少實體結構。我有一個Graph
,其中包含一組GraphElements
。我Graph
由Edges
,Nodes
和Loads
這是所有不同的元素。
對於深優先搜索,例如每個節點需要知道它的鄰居節點。因此我需要NeigborNodes
-List。對於其他功能,我還需要了解ConnectedElements
-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...
}
}
我的問題:
(A)我怎樣才能改變我的模型配置或我的實體存儲
NeighborNodes
在我的數據庫?(B)我怎樣才能改變我的模型配置或我的實體存儲在我的數據庫
ConnectedElements
?
感謝您的幫助!