从数据库中删除模型数据时,除主键外的所有内容都被删除,我该如何删除所有数据?
When removing model data from a db everything but the primary key is getting deleted, how can i remove all of it?
我正在开发一个列表框系统,操作员可以在其中 select 在用户制度中练习并删除它们。目前,当调用 RemoveExercises
时,它会删除与 RegimeItem
关联的所有数据,但与 RegimeItemID
关联的数据。
对于 RemoveExercises 函数,我已经开始使用 Session,以便 RequestedExercises 列表框随着所做的更改(添加和删除练习)进行更新。对于为什么不删除整个模型项目的任何帮助或建议,我们表示赞赏。如下所示,table 数据显示了 "deleted" 项目,但项目 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; }
}
以下更改应该可以修复它:
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();
}
我正在开发一个列表框系统,操作员可以在其中 select 在用户制度中练习并删除它们。目前,当调用 RemoveExercises
时,它会删除与 RegimeItem
关联的所有数据,但与 RegimeItemID
关联的数据。
对于 RemoveExercises 函数,我已经开始使用 Session,以便 RequestedExercises 列表框随着所做的更改(添加和删除练习)进行更新。对于为什么不删除整个模型项目的任何帮助或建议,我们表示赞赏。如下所示,table 数据显示了 "deleted" 项目,但项目 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; }
}
以下更改应该可以修复它:
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();
}