首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >asp.net控制器:如何在删除具有相似信息的表的同时保存“历史”表的数据?

asp.net控制器:如何在删除具有相似信息的表的同时保存“历史”表的数据?
EN

Stack Overflow用户
提问于 2019-04-10 02:53:15
回答 1查看 285关注 0票数 0

我正在尝试为我的网站创建一个历史页面/表,当用户完成锻炼时,当前用户的锻炼表会在完成时删除锻炼信息(它已经在运行),并且历史表会用相同的字段+ DateTime更新,以便用户可以看到他们之前完成的锻炼。

目前,我对如何实现这一点感到困惑。我当前在Controller中的"complete“函数如下所示:

代码语言:javascript
复制
        [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代码,用于根据ID删除表中的信息。我希望添加的内容非常简单,如下所示:

代码语言:javascript
复制
            var oldWorkouts = new UserWorkoutHistory { UserId = model.UserId, UserOldWorkout = model.UserActiveWorkout };
            db.UserWorkoutHistories.Add(oldWorkouts);

就在db.UserCurrWorkouts.Remove代码的上面。我当前锻炼数据库的“模型”在函数中无法识别,然而,除非有更好的方法,否则如何识别它是我的主要问题。

任何信息或提示都将不胜感激!让我知道,如果你想看到任何其他代码,可能会带来我的问题清晰!

编辑:这是UserCurrWorkout模型:

代码语言:javascript
复制
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模型:

代码语言:javascript
复制
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; }
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-04-10 04:05:32

如果我没弄错你的意思,我想这就是你需要的:

代码语言:javascript
复制
    [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");
    }

更新:还必须在此行中指定oldWorkouts的外键WorkoutExercise_LinkId

代码语言:javascript
复制
var oldWorkouts = new UserWorkoutHistory { UserId = userCurrWorkout.UserId, UserOldWorkout = userCurrWorkout.UserActiveWorkout , WorkoutExerciseId = 'a valid key from WorkoutExercise table'};

更新2:虽然,首先您需要在UserCurrWorkout实体中定义一个外键,并避免EF在数据库中生成实体中不存在的fk列:

代码语言:javascript
复制
[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; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55599473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档