EF модель со списком объектов - PullRequest
1 голос
/ 12 июня 2019

Я создам приложение для сохранения результатов в тренажерном зале.У меня есть класс Exercise:

public class Exercise
{
    public Guid Id { get; protected set; }
    public string Name { get; protected set; }
    public Category Category { get; protected set; }
}

и класс TrainingPlan, который содержит список упражнений:

public class TrainingPlan
{
    public Guid Id { get; protected set; }
    public string Name { get; protected set; }
    public IEnumerable<Exercise> Exercises { get; protected set; }
}

Я создаю EntityFramework DbContext:

public class GymContext : DbContext
{
    public GymContext(DbContextOptions<GymContext> options) : base(options) { }

    public DbSet<Exercise> Exercises { get; set; }
    public DbSet<TrainingPlan> TrainingPlans { get; set; }
}

И затем я использовалкоманда add -igration и update-database.Для таблицы с упражнением в EF было добавлено дополнительное поле с TrainingPlanId.Так что теперь я могу назначить Упражнение только на один TrainingPlan.Но я хочу назначить упражнение для нескольких планов, каково лучшее решение для этого случая?

1 Ответ

0 голосов
/ 13 июня 2019

Спасибо за помощь, я использую много ко многим. Решаю, я создаю новый класс:

public class TrainingPlanExercise
{
    public Guid TrainigPlanId { get; protected set; }
    public TrainingPlan TrainigPlan { get; protected set; }
    public Guid ExerciseId { get; protected set; }
    public Exercise Exercise { get; protected set; }
}

А в TrainingPlan я заменяю Список упражнений на Список TrainingPlanExercise.

Мой EntityFramework DbContext теперь выглядит так:

public class GymContext : DbContext
{
    public GymContext(DbContextOptions<GymContext> options) : base(options) { }

    public DbSet<Exercise> Exercises { get; set; }
    public DbSet<TrainingPlan> TrainingPlans { get; set; }
    public DbSet<TrainingPlanExercise> TrainingPlanExercises { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<TrainingPlanExercise>()
            .HasKey(e => new { e.ExerciseId, e.TrainigPlanId });

        modelBuilder.Entity<TrainingPlanExercise>()
            .HasOne(x => x.TrainigPlan)
            .WithMany(x => x.Exercises)
            .HasForeignKey(x => x.TrainigPlanId);
     }
}

К сожалению, я снова застрял. Когда я хочу получить из БД одну запись TrainingPlan, используя этот метод:

        public TrainingPlan Get(Guid id)
        => _context.TrainingPlans.Include(x => x.Exercises).Single(x => x.Id == id);

Я получаю запись с нулевым упражнением в List TrainingPlanExercise.

Должен ли я добавить что-то еще в DbContext или есть другое решение?

КСТАТИ. Я использовал EF core.

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