C# Entitystate。未保存修改的mvc3引用对象
我在保存trainer对象时遇到问题。 除了教练之外,一切都保存了下来。 我查看了对象训练,并填写了所有属性。(还包括位置和培训师的属性) 我没有收到错误,但是没有保存trainer对象 这是我的密码:C# Entitystate。未保存修改的mvc3引用对象,c#,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc 3,Entity Framework,我在保存trainer对象时遇到问题。 除了教练之外,一切都保存了下来。 我查看了对象训练,并填写了所有属性。(还包括位置和培训师的属性) 我没有收到错误,但是没有保存trainer对象 这是我的密码: Context db=new Context(); public void modifieTraining(Training training) { db.Entry(training.Location).State = EntityState.Modif
Context db=new Context();
public void modifieTraining(Training training)
{
db.Entry(training.Location).State = EntityState.Modified;
db.Entry(training.Trainer).State = EntityState.Modified;
db.Entry(training).State = EntityState.Modified;
db.SaveChanges();
}
这是我唯一得到的东西:
@Html.DropDownList("trainer", new SelectList(ViewBag.Trainer, "TrainerId", "Firstname"), "Selecteer een trainer")
@Html.TextBoxFor(model => model.Location.Address)
@Html.TextBoxFor(model=>model.Location.City)
...
稍后在我的控制器中:
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
}
repository.modifieTraining(training);
return RedirectToAction("Index");
}
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
trainingDetail.TrainerId = trainingDetail.Trainer.TrainerId;
}
repository.modifieTraining(training);
}
由于某种奇怪的原因,当我重新启动机器时,一切都很顺利。 但当我打开SQLServerManagementStudio时。它仍然显示一个空值。 但是当我执行get方法时,会显示正确的值
可能是因为该字段可为空吗?请原谅我的第一个答案。 但是我现在发现了问题。 问题是我没有真正修改任何东西。 我只是在对象中添加了一个trainer,但是trainerobject本身没有修改,所以没有任何更改 模型是这样的:
public class Training
{
[Key]
public int TrainingId { get; set; }
public Trainer Trainer{get; set;}
....
}
在模型中添加:
public int? TrainerId{get; set;}
控制器:
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
}
repository.modifieTraining(training);
return RedirectToAction("Index");
}
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
trainingDetail.TrainerId = trainingDetail.Trainer.TrainerId;
}
repository.modifieTraining(training);
}
谢谢你的帮助,很抱歉我的回答很愚蠢。请原谅我的第一个回答。 但是我现在发现了问题。 问题是我没有真正修改任何东西。 我只是在对象中添加了一个trainer,但是trainerobject本身没有修改,所以没有任何更改 模型是这样的:
public class Training
{
[Key]
public int TrainingId { get; set; }
public Trainer Trainer{get; set;}
....
}
在模型中添加:
public int? TrainerId{get; set;}
控制器:
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
}
repository.modifieTraining(training);
return RedirectToAction("Index");
}
public ActionResult EditTraining(int id, Training training, string trainer)
{
if (trainer != null && trainer!="Selecteer een trainer" )
{
training.Trainer = repository.getTrainer(Convert.ToInt32(trainer));
trainingDetail.TrainerId = trainingDetail.Trainer.TrainerId;
}
repository.modifieTraining(training);
}
感谢所有的帮助,并为愚蠢的回答感到抱歉。我从未见过个别属性被标记为已修改的示例,尽管这听起来确实是一件合理的事情。但有两件事:1<代码>db.Entry(training.State)=EntityState.Modified代码>我想你已经有了
。说明
。2.您是否尝试过:db.Entry(training.State=EntityState.Modified代码>而不是为每个属性修改设置?请尝试db.Attach(training.Trainer)。我猜它没有连接到上下文。对不起,“.State”是我的一个拼写错误。在我的代码中,它输入正确。我会纠正它我看了上下文,看到它已经附加。我再次尝试分离和附加,但没有帮助您从存储库获得培训,但没有修改其任何属性。你只是说它的状态被修改了。我从来没有见过个别属性被标记为修改的例子,尽管这听起来是一件合理的事情。但有两件事:1<代码>db.Entry(training.State)=EntityState.Modified代码>我想你已经有了。说明
。2.您是否尝试过:db.Entry(training.State=EntityState.Modified代码>而不是为每个属性修改设置?请尝试db.Attach(training.Trainer)。我猜它没有连接到上下文。对不起,“.State”是我的一个拼写错误。在我的代码中,它输入正确。我会纠正它我看了上下文,看到它已经附加。我再次尝试分离和附加,但没有帮助您从存储库获得培训,但没有修改其任何属性。你只是说它的状态被修改了。