Контроллер asp.net: как я могу сохранить данные для таблицы «истории» одновременно с удалением таблицы с похожей информацией? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать страницу / таблицу истории для своего веб-сайта, где, когда пользователь завершает тренировку, таблица тренировки текущего пользователя удаляет информацию о тренировке по завершении (которая уже работает), И таблица истории обновляется с помощью идентичные поля + DateTime, чтобы пользователь мог видеть предыдущие тренировки, которые он завершил.

В настоящее время я не понимаю, как это реализовать. Моя текущая «полная» функция в контроллере выглядит следующим образом:

        [HttpPost, ActionName("Complete")]
        [ValidateAntiForgeryToken]
        public ActionResult CompleteConfirmed(int id)
        {
            UserCurrWorkout userCurrWorkout = db.UserCurrWorkouts.Find(id);
            db.UserCurrWorkouts.Remove(userCurrWorkout);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

, который является просто кодом CRUD для удаления информации в таблице на основе идентификатора. То, что я хотел бы добавить к этому, очень просто, что-то вроде:

            var oldWorkouts = new UserWorkoutHistory { UserId = model.UserId, UserOldWorkout = model.UserActiveWorkout };
            db.UserWorkoutHistories.Add(oldWorkouts);

чуть выше кода db.UserCurrWorkouts.Remove. «Модель» моей текущей базы данных тренировок не распознается в функции, однако, как сделать так, это мой основной вопрос, если нет лучшего подхода.

Любая информация или советы будут с благодарностью! Дайте мне знать, если вы хотите увидеть любой другой код, который может внести ясность в мою проблему!

РЕДАКТИРОВАТЬ: Вот UserCurrWorkout Модель:

namespace Powerlevel.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    [Table("UserCurrWorkout")]
    public partial class UserCurrWorkout
    {
        [Key]
        public int UCWId { get; set; }

        public int UserId { get; set; }

        public int UserActiveWorkout { get; set; }

        public virtual User User { get; set; }

        public virtual WorkoutExercise WorkoutExercise { get; set; }
    }
}

и модель UserWorkoutHistory:

namespace Powerlevel.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    [Table("UserWorkoutHistory")]
    public partial class UserWorkoutHistory
    {
        [Key]
        public int UWHId { get; set; }

        private DateTime Date = DateTime.Now;

        public DateTime CurrentTime
        {
            get { return Date; }
            set { Date = value; }
        }

        public int UserId { get; set; }

        public int UserOldWorkout { get; set; }

        public virtual User User { get; set; }

        public virtual WorkoutExercise WorkoutExercise { get; set; }
    }
}

1 Ответ

1 голос
/ 09 апреля 2019

Если я правильно понимаю вашу точку зрения, думаю, это то, что вам нужно:

    [HttpPost, ActionName("Complete")]
    [ValidateAntiForgeryToken]
    public ActionResult CompleteConfirmed(int id)
    {
        UserCurrWorkout userCurrWorkout = db.UserCurrWorkouts.Find(id);
        var oldWorkouts = new UserWorkoutHistory { UserId = userCurrWorkout.UserId, UserOldWorkout = userCurrWorkout.UserActiveWorkout };
        db.UserWorkoutHistories.Add(oldWorkouts);
        db.UserCurrWorkouts.Remove(userCurrWorkout);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

Обновление : Также в этой строке должен быть назначен внешний ключ WorkoutExercise_LinkId из oldWorkouts:

var oldWorkouts = new UserWorkoutHistory { UserId = userCurrWorkout.UserId, UserOldWorkout = userCurrWorkout.UserActiveWorkout , WorkoutExerciseId = 'a valid key from WorkoutExercise table'};

Обновление 2 : Хотя сначала вам нужно определить внешний ключ в сущности UserCurrWorkout и избегать EF для создания столбца fk в базе данных, который не существует в сущности:

[Table("UserCurrWorkout")]
public partial class UserCurrWorkout
{
    [Key]
    public int UCWId { get; set; }
    public int UserId { get; set; }
    public int UserActiveWorkout { get; set; }
    public virtual User User { get; set; }
    public int WorkoutExerciseId { get; set; } // The explicit foreign key
    public virtual WorkoutExercise WorkoutExercise { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...