我有一个使用复合键作为PK的实体。我想向自己添加QuestStage
的集合,但在映射密钥时,实体框架告诉我密钥已经被使用。处理这种情况的最佳方法是什么?我需要两个密钥才能共享QuestID
,因为QuestStages
都属于单个Quest
实体 - PK(QuestID,舞台)
public class QuestStage
{
public QuestStage
{
FollowUpQuestStages = new List<QuestStage>();
}
public int QuestID { get; set; }
public int Stage { get; set; }
public virtual ICollection<QuestStage> FollowUpQuestStages { get; set; }
}
映射
public class QuestStageMap : EntityTypeConfiguration<QuestStage>
{
public QuestStageMap()
{
// Non Problematic Mappings
// Problematic Mapping
HasMany(x => x.FollowUpQuestStages)
.WithMany()
.Map(m =>
{
m.ToTable("FollowUpQuestStage");
m.MapLeftKey("QuestID", "StageID");
m.MapRightKey("QuestID", "FollowUpStageID");
});
}
}
答案 0 :(得分:0)
经过一些修修补补后,我终于开始工作了。我确实决定改名,但它的想法是一样的。
<强>实体强>
public partial class QuestStageChain
{
public int QuestID { get; set; }
public int StageID { get; set; }
public int NextStageID { get; set; }
public virtual QuestStage QuestStage { get; set; }
public virtual QuestStage NextQuestStage { get; set; }
}
<强>映射强>
this.HasRequired(t => t.QuestStage)
.WithMany(t => t.QuestStageChains)
.HasForeignKey(d => new { d.QuestID, d.NextStageID })
.WillCascadeOnDelete(false);
this.HasRequired(t => t.NextQuestStage)
.WithMany(t => t.NextQuestStages)
.HasForeignKey(d => new { d.QuestID, d.StageID })
.WillCascadeOnDelete(false);