Таблицы EF Core не созданы - PullRequest
1 голос
/ 29 апреля 2020

Сейчас я работаю над личным проектом, использующим ядро ​​ef с SQLLite в качестве основного туберкулеза. У меня возникла проблема, связанная с тем, что A) некоторые из определяемых мной таблиц не созданы, и B) те, которые, по-видимому, имеют неправильное имя. Мне интересно, связано ли это с тем, как я определил свои отношения (хотя мне это кажется нормальным).

Обсуждаются следующие таблицы: членство, тренировки, группы упражнений и упражнения. Отношение: Членство 1: N Тренировки Тренировки 1: N ExerciseGroups ExerciseGroups 1: N Упражнения

Таким образом, по сути, это вложенная структура. Моя проблема в том, что когда я запускаю код, я вижу, что у меня есть созданная таблица «Упражнения и тренировки», обратите внимание, что их имена должны быть «Упражнения и тренировки», и я вообще не вижу свою созданную таблицу «ExerciseGroups».

В моем DataContext я определяю их следующим образом:

public DbSet<Membership> Memberships { get; set; }
public DbSet<Workout> Workouts { get; set; }
public DbSet<ExerciseGroup> ExerciseGroups { get; set; }
public DbSet<Exercise> Exercises { get; set; }

builder.Entity<Membership>()
            .HasMany(x => x.Workouts)
            .WithOne(y => y.Membership);

builder.Entity<Workout>()
            .HasMany(x => x.ExerciseGroups)
            .WithOne(y => y.Workout);

builder.Entity<ExerciseGroup>()
            .HasMany(y => y.Exercises)
            .WithOne(x => x.ExerciseGroup);

Затем для заполнения данных я отправляю их по отдельности, используя метод Entity.HasData.

Объекты домена определены следующим образом (я только копирую соответствующую часть, которая отображает взаимосвязь)

public class Membership {
     public List<Workout> Workouts { get; set; }
}

public class Workout {
     public Membership Membership { get; set; }
     public string MembershipId { get; set; }
     public List<ExerciseGroup> ExerciseGroups { get; set; }
}

public class ExerciseGroup {
     public string WorkoutId { get; set; }
     public Workout Workout { get; set; }
     public List<Exercise> Exercises { get; set; }
}

public class Exercise {
     public string ExerciseGroupId { get; set; }
     public ExerciseGroup ExerciseGroup { get; set; }
}

Я что-то упускаю из виду?

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

попробуйте использовать виртуальную ICollection для навигационных свойств

Вы можете создать ее в БД и создать леса, я думаю, что это простой способ понять, как это работает в отношении лесов

public class Membership {
    public Membership ()
    {
        Workouts = new HashSet<Workout>();
    }

    public virtual ICollection<Workout> Workouts { get; set; }
}
1 голос
/ 29 апреля 2020

Не уверен, что это верный ответ или что-то не так с sqlite, но после того, как я удалил все миграции, я убедился, что миграции указывают на правильные идентификаторы, когда я их заполняю (как ни странно, одно из упражнений просто не выполнялось чтобы добавить, нет реального объяснения, почему), теперь у меня есть схема правильно загружена.

Я изменил имена наборов БД на единственное, а не на множественное, чтобы они соответствовали стилю именования, который у меня есть в их отдельных классах доменов. Итак, Тренировки -> Тренировки и др. c.

Я думаю, что просто собираюсь переключиться на пн go, у меня нет таких проблем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...