C# 从数据库中删除模型数据时,除了主键之外的所有内容都将被删除,如何删除所有内容?
我正在开发一个列表框系统,操作员可以在用户机制中选择练习并删除它们。当前,当调用C# 从数据库中删除模型数据时,除了主键之外的所有内容都将被删除,如何删除所有内容?,c#,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我正在开发一个列表框系统,操作员可以在用户机制中选择练习并删除它们。当前,当调用RemoveExercises时,它会删除与regimitem关联的所有数据,但会删除regimitemid。 对于RemoveExercises函数,我已经开始使用一个会话,这样RequestedExercises列表框就会随着所做的更改(练习的添加和删除)而更新。如果您对为什么不删除整个模型项有任何帮助或建议,我们将不胜感激。如下所示,表数据显示了“已删除”项目,但项目ID仍然保留 控制器(cs) [HttpG
RemoveExercises
时,它会删除与regimitem
关联的所有数据,但会删除regimitemid
。
对于RemoveExercises函数,我已经开始使用一个会话,这样RequestedExercises列表框就会随着所做的更改(练习的添加和删除)而更新。如果您对为什么不删除整个模型项有任何帮助或建议,我们将不胜感激。如下所示,表数据显示了“已删除”项目,但项目ID仍然保留
控制器(cs)
[HttpGet]
public ActionResult ExerciseIndex(int-id,UserExerciseViewModel-vmodel)
{
User User=db.Users.Find(id);
UserExerciseViewModel=newuserexerciseviewmodel{AvailableExercises=GetAllExercises(),RequestedExercises=ChosenExercises(user,vmodel)};
model.UserID=user.UserID;
会话[“UserExerciseViewModel”]=模型;
返回视图(模型);
}
[HttpPost]
public ActionResult ExerciseIndex(UserExerciseViewModel模型,字符串添加,字符串删除,字符串发送,int-id,RegimeItem项)//,User-rUser)//int-userID
//public ActionResult ExerciseIndex(UserExerciseViewModel模型、字符串添加、字符串删除、字符串发送、int-id、regimitem项)
{
UserExerciseViewModel2=(UserExerciseViewModel)(会话[“UserExerciseViewModel”]);
model.RequestedExercises=model2.RequestedExercises;
model.AvailableExercises=model2.AvailableExercises;
如果(!string.IsNullOrEmpty(add))
附录练习(型号、id);
如果(!string.IsNullOrEmpty(删除))为else
RemoveExercises(型号,id);
返回重定向操作(“ExerciseIndex”,new{id=model2.UserID,vmodel=model2});
}
void RemoveExercises(UserExerciseViewModel模型,int-id)
{
var userExerciseViewModel=(userExerciseViewModel)(会话[“userExerciseViewModel]”);
foreach(在model.RequestedSelected中选择int)
{
如果(model.RequestedSelected!=null)
{
User User=db.Users.Find(id);
RegimeItem item=db.RegimeItems.Find(选中);//---删除与RegimeItem关联的用户
item.RegimeExercise=this.getAlleexercises().FirstOrDefault(i=>i.ExerciseID==selected);//--这将删除RegimeExercise
user.RegimeItems.Remove(项);
}
}
db.SaveChanges();
}
私有列表GetAllExercises()
{
返回db.Exercises.ToList();
}
私有列表选择练习(用户用户,用户练习视图模型)
{
返回db.Users
.Where(u=>u.UserID==user.UserID)
.选择多个(u=>u.RegimeItems)
.ToList();
}
型号(cs)
公共类用户
{
public int UserID{get;set;}
公共ICollection RegimeItems{get;set;}
公共用户()
{
this.RegimeItems=新列表();
}
}
公共类注册
{
public int regimitemid{get;set;}
公共演习区域演习{get;set;}
}
视图模型(cs)
public类UserExerciseViewModel
{
可用公共列表执行{get;set;}
公共列表请求执行{get;set;}
public int?SelectedExercise{get;set;}
public int[]可用已选择{get;set;}
public int[]RequestedSelected{get;set;}
公共字符串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();
}
谢谢,我已经更新了问题以显示表数据的一段,它删除了其他属性,但没有删除regimitemid。我为我糟糕的命名约定道歉,会话的路径对我自己来说也是相当混乱的。我想我的问题的答案在
RemoveExercises
中,因为我设法从中删除了其他模型属性。@Nilmag您的屏幕截图中是哪个表?它是RegimeItemI的表我将答案更改为您要找的。
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; }
}
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();
}