0
我試圖找出如何映射以下關係:EF映射一對多
的「關係」實體需要一個「節點」和「RelatedNode」。
Node實體具有「關係」(HasMany)的集合,其中節點被要求是Relation.Node或Relation.RelatedNode。
當前映射導致看起來像這樣的表:
[Id],[NodeId],[RelatedNodeId],[RelationType],[Node_Id]
[NODE_ID]是越來越自動創建,而這也正是我想避免的。
關聯實體:
public class Relation
{
private Relation()
{
}
public Relation(int nodeId, int relatedNodeId)
{
NodeId = nodeId;
RelatedNodeId = relatedNodeId;
}
public Relation(Node node, Node relatedNode)
{
Node = node;
RelatedNode = relatedNode;
}
public int Id { get; set; }
public int NodeId { get; set; }
public Node Node { get; set; }
public int RelatedNodeId { get; set; }
public Node RelatedNode { get; set; }
public RelationType RelationType { get; set; }
}
流利的API:
// Relation
modelBuilder.Entity<Relation>().Map(m =>
{
m.ToTable("Relations");
});
modelBuilder.Entity<Relation>()
.HasKey(t => t.Id)
.Property(t => t.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Relation>().HasRequired(t => t.Node).
WithMany().HasForeignKey(t => t.NodeId).WillCascadeOnDelete(false);
modelBuilder.Entity<Relation>().HasRequired(t => t.RelatedNode).
WithMany().HasForeignKey(t => t.RelatedNodeId).WillCascadeOnDelete(false);
// Node
modelBuilder.Entity<Node>().Map(m =>
{
m.MapInheritedProperties();
m.ToTable("Nodes");
});
modelBuilder.Entity<Node>().HasMany(t => t.Relations);
我已將其刪除。創建的數據庫模式仍然具有[Node_Id](不需要),以及所需的[NodeId]和[RelatedNodeId])。 – blgrnboy
嗯,應該是原因。你如何生成模式?當我使用CodeFirst遷移時,我總是忘記使用-force,有時我的更改沒有反映出來。 – Vlad274
我剛剛刪除了整個數據庫,然後運行它。我禁用了代碼優先的遷移。 – blgrnboy