.net 实体框架,更新和保存使用SelectMany检索的对象上的更改不起作用
情景1://在这种情况下,训练不会从数据库中删除.net 实体框架,更新和保存使用SelectMany检索的对象上的更改不起作用,.net,entity-framework,.net,Entity Framework,情景1://在这种情况下,训练不会从数据库中删除 Season season = dbContext.Seasons.Find(58); var ps1 = season.PlannerSeason; PlannerWorkout pworkoutToRemove = ps1.Weeks.SelectMany(w => w.WeekDays.SelectMany(wd => wd.PlannerWorkouts)).Where(pw => pw.WorkoutID == 361
Season season = dbContext.Seasons.Find(58);
var ps1 = season.PlannerSeason;
PlannerWorkout pworkoutToRemove = ps1.Weeks.SelectMany(w => w.WeekDays.SelectMany(wd => wd.PlannerWorkouts)).Where(pw => pw.WorkoutID == 3615).FirstOrDefault();
bool isRemoved = ps1.Weeks.SelectMany(w => w.WeekDays.SelectMany(wd => wd.PlannerWorkouts)).ToList().Remove(pworkoutToRemove);
dbContext.SaveChanges(); //does not work
情景2://此处检索完全相同的训练并从db中删除。它起作用了
Season season = dbContext.Seasons.Find(58);
var ps1 = season.PlannerSeason;
PlannerWeek pweek = ps1.Weeks.Find(w => w.WeekNo == 14);
PlannerWeekDay pwd = pweek.WeekDays.Find(d => d.DayNo == 1);
PlannerWorkout pworkoutToRemove = pwd.PlannerWorkouts.Find(pw => pw.WorkoutID == 3615);
bool isRemoved = pwd.PlannerWorkouts.Remove(pworkoutToRemove);
dbContext.SaveChanges(); //works
通过SelectMany检索单个对象会有区别吗?问题不在于使用
SelectMany检索对象,而是在这里
bool isRemoved = ps1.Weeks.SelectMany(w => w.WeekDays.SelectMany(wd => wd.PlannerWorkouts))
.ToList() // <--
.Remove(pworkoutToRemove);
换句话说,您正在创建一个临时列表并从该列表中删除对象,而不是像工作示例中那样从父集合中删除对象
如果您对父工作日
具有反向导航属性,则可以使用此属性
bool isRemoved = pworkoutToRemove != null &&
pworkoutToRemove.WeekDay.PlannerWorkouts.Remove(pworkoutToRemove);
或者您可以直接从相应的DbSet
中将其删除:
bool isRemoved = false;
if (pworkoutToRemove != null)
{
dbContext.PlannerWorkouts.Remove(pworkoutToRemove);
isRemoved = true;
}
或将实体状态设置为“已删除”
:
bool isRemoved = false;
if (pworkoutToRemove != null)
{
dbContext.Entry(pworkoutToRemove).State = EntityState.Deleted;
isRemoved = true;
}
bool isRemoved = false;
if (pworkoutToRemove != null)
{
dbContext.Entry(pworkoutToRemove).State = EntityState.Deleted;
isRemoved = true;
}