【问题标题】:When removing model data from a db everything but the primary key is getting deleted, how can i remove all of it?当从数据库中删除模型数据时,除了主键被删除之外,我怎样才能删除所有这些数据?
【发布时间】:2015-05-17 16:27:37
【问题描述】:

我正在开发一个列表框系统,操作员可以在其中选择用户机制中的练习并删除它们。目前,当调用RemoveExercises 时,它会删除与RegimeItem 相关联的所有数据,但与RegimeItemID 相关联的数据除外。 对于 RemoveExercises 函数,我已经开始使用 Session 以便 RequestedExercises 列表框随着所做的更改(添加和删除练习)进行更新。对于为什么不删除整个模型项目的任何帮助或建议,我们将不胜感激。如下所示,表格数据显示了“已删除”的项目,但项目 ID 仍然存在。

控制器(cs)

    [HttpGet]
    public ActionResult ExerciseIndex(int id, UserExerciseViewModel vmodel)
    {
        User user = db.Users.Find(id);
        UserExerciseViewModel model = new UserExerciseViewModel { AvailableExercises = GetAllExercises(), RequestedExercises = ChosenExercises(user, vmodel) };
        model.UserID = user.UserID;
        Session["UserExerciseViewModel"] = model;
        return View(model);
    }

    [HttpPost]
    public ActionResult ExerciseIndex(UserExerciseViewModel model, string add, string remove, string send, int id, RegimeItem item)//, User rUser) //int userID
    //public ActionResult ExerciseIndex(UserExerciseViewModel model, string add, string remove, string send, int id, RegimeItem item)
    {

        UserExerciseViewModel model2 = (UserExerciseViewModel)(Session["UserExerciseViewModel"]);
        model.RequestedExercises = model2.RequestedExercises;
        model.AvailableExercises = model2.AvailableExercises;
        if (!string.IsNullOrEmpty(add))
            AddExercises(model, id);
        else if (!string.IsNullOrEmpty(remove))
            RemoveExercises(model, id);
        return RedirectToAction("ExerciseIndex", new { id = model2.UserID, vmodel = model2 });
    }

    void RemoveExercises(UserExerciseViewModel model, int id)
    {
        var userExerciseViewModel = (UserExerciseViewModel)(Session["UserExerciseViewModel"]);
        foreach (int selected in model.RequestedSelected)
        {
            if (model.RequestedSelected != null)
            {
                User user = db.Users.Find(id);
                RegimeItem item = db.RegimeItems.Find(selected); // ---deletes the user associated with regimeitem
                item.RegimeExercise = this.GetAllExercises().FirstOrDefault(i => i.ExerciseID == selected); //--this removes the regimeexercise
                user.RegimeItems.Remove(item);
            }
        }
        db.SaveChanges();
    }

    private List<Exercise> GetAllExercises()
    {
        return db.Exercises.ToList();
    }

    private List<RegimeItem> ChosenExercises(User user, UserExerciseViewModel model)
    {
        return db.Users
     .Where(u => u.UserID == user.UserID)
     .SelectMany(u => u.RegimeItems)
     .ToList();
    }

模型(cs)

 public class User
    {
        public int UserID { get; set; }
        public ICollection<RegimeItem> RegimeItems { get; set; }
        public User()
        {
            this.RegimeItems = new List<RegimeItem>();
        } 
    }
    public class RegimeItem
    {
        public int RegimeItemID { get; set; }
        public Exercise RegimeExercise { get; set; }
    }

ViewModel(cs)

public class UserExerciseViewModel
{
    public List<Exercise> AvailableExercises { get; set; }
    public List<RegimeItem> RequestedExercises { get; set; }
    public int? SelectedExercise { get; set; }
    public int[] AvailableSelected { get; set; }
    public int[] RequestedSelected { get; set; }
    public string SavedRequested { get; set; }
    public int UserID { get; set; }
}

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4


    【解决方案1】:

    以下更改应该可以解决它:

    void RemoveExercises(UserExerciseViewModel model, int id)
    {
        var userExerciseViewModel = (UserExerciseViewModel)(Session["UserExerciseViewModel"]);
        foreach (int selected in model.RequestedSelected)
        {
            if (model.RequestedSelected != null)
            {
                User user = db.Users.Find(id);
                RegimeItem item = db.RegimeItems.Find(selected);
                item.RegimeExercise = this.GetAllExercises().FirstOrDefault(i => i.ExerciseID == selected); //--this removes the regimeexercise
                user.RegimeItems.Remove(item); //deletes the user's regimeitem
                db.RegimeItems.Remove(item); //removes the regimeitem itself 
            }
        }
        db.SaveChanges();
    }
    

    【讨论】:

    • 谢谢,我已更新问题以显示表数据的一部分,它删除了其他属性,但不会删除 RegimeItemID。我为我糟糕的命名约定道歉,而且会话的路径也让我自己很困惑。我认为我的问题的答案在于RemoveExercises,因为我设法从那里删除了其他模型属性。
    • @Nilmag 你的截图是哪个表?
    • 它是 RegimeItem 的表
    • 我把答案改成了你要找的。​​span>
    猜你喜欢
    • 2019-12-22
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 2018-01-15
    • 2021-05-16
    • 2013-01-10
    相关资源
    最近更新 更多