Я пытаюсь установить отношения между объектом и версиями одного и того же объекта. Я использую EFCore и сохраняю идентификатор одного из объектов в обоих полях.
Мои объекты выглядят следующим образом:
public class Workflow
{
public int WorkflowId { get; set; }
[ForeignKey("Parent")]
public int? ParentId { get; set; }
public virtual Workflow Parent { get; set; }
public virtual List<Workflow> Workflows { get; set; } = new List<Workflow>();
public int InternalSequence { get; set; }
public decimal Quantity { get; set; }
public virtual List<WorkflowVersionLink> VersionLinks { get; set; } = new List<WorkflowVersionLink>();
}
public class WorkflowVersionLink
{
public int WorkflowVersionLinkId { get; set; }
public int? IsVersionOfId { get; set; }
public virtual Workflow IsVersionOf { get; set; }
public int? VersionId { get; set; }
public virtual Workflow Version { get; set; }
public bool IsLive { get; set; }
}
И я настраиваю OnModelCreating следующим образом:
//All of my attempts have used this:
modelBuilder.Entity<WorkflowVersionLink>()
.HasKey(t => new { t.IsVersionOfId, t.VersionId });
//Attempt one: No manual configuration
//Attempt two:
modelBuilder.Entity<WorkflowVersionLink>()
.HasOne(lk => lk.Version)
.WithMany(wf => wf.VersionLinks)
.HasForeignKey(lk => lk.VersionId);
//Attempt three (following info from SO):
modelBuilder.Entity<WorkflowVersionLink>()
.HasOne(lk => lk.IsVersionOf)
.WithMany()
.HasForeignKey(lk => lk.IsVersionOfId)
.OnDelete(DeleteBehavior.Restrict);
modelBuilder.Entity<WorkflowVersionLink>()
.HasOne(lk => lk.Version)
.WithMany(wf => wf.VersionLinks)
.HasForeignKey(lk => lk.VersionId);
Я уже попробовал подход здесь:
Само-ссылающиеся отношения многие-ко-многим и другие упомянутые выше подходы.
Я открыт для изменения структуры, до всего этого я не использовал объект WorkflowVersionLink и просто имел список версий, однако это не удалось также из-за того, что у меня уже есть список дочерних рабочих процессов (который мне нужно сохранить )
Как видите, я пытался решить эту проблему самостоятельно, но теперь я застрял и решил обратиться к StackOverflow.
Вы можете увидеть результат базы данных здесь: (Я уверен на 100%, что я добавил два совершенно новых объекта, у которых не было идентификаторов каждый раз, когда я запускал код)
результат базы данных
Что я здесь не так делаю?
Спасибо