@kttotto
все, что .NET

Как в EF настроить одну сущность с двумя внешними ссылками на другую сущность?

Использую code-first.
Есть одна сущность

public class Stage
    {
        public int Id { get; set; }
        public string Title { get; set; }
        public string Body { get; set; }
        
        public virtual ICollection<Motion> Motions { get; set; }

        public Stage()
        {
            Motions = new List<Motion>();
        }
    }


Есть вторая сущность

public class Motion
    {
        public int Id { get; set; }
        public string Description { get; set; }

        public int NextStageId { get; set; }
        public virtual Stage NextStage { get; set; }

        public int OwnerStageId { get; set; }
        public virtual Stage OwnerStage { get; set; }
    }


По сути Stage это как узел связанного списка, а Motion это ссылки на эти узлы. Получается, что Stage знает о других узлах только через эти ссылки. Ссылка (Motion) должна знать кому принадлежит (OwnerStage) и ссылаться на другие Stage (NextStage) , у Stage обратной связи через NextStage быть не должно.

Есть настройка

public MotionMapper()
        {
            this.ToTable("Motion");
            this.Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
            this.Property(x => x.Id).IsRequired();
            this.Property(x => x.Description).IsRequired();

            this.HasRequired(x => x.OwnerStage)
                .WithMany(x => x.Motions)
                .HasForeignKey(x => x.OwnerStageId);

            this.HasOptional(x => x.NextStage)
                .WithMany();  // Вот тут я теряюсь что писать, перепробовал много вариантов)
        }


База генериться не хочет. Комментирую NextStage в Motion - все нормально. Значит дело именно в этом поле.

Помогите разобраться как там настроить все это дело)
  • Вопрос задан
  • 306 просмотров
Решения вопроса 2
@kttotto Автор вопроса
все, что .NET
Ответ найден. Решилось таким способом
[InverseProperty("OwnerStage")]
public virtual ICollection<Motion> Motions { get; set; }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы