Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Entitystate。未保存修改的mvc3引用对象_C#_Asp.net Mvc 3_Entity Framework - Fatal编程技术网

C# Entitystate。未保存修改的mvc3引用对象

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

我在保存trainer对象时遇到问题。 除了教练之外,一切都保存了下来。 我查看了对象训练,并填写了所有属性。(还包括位置和培训师的属性) 我没有收到错误,但是没有保存trainer对象

这是我的密码:

   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”是我的一个拼写错误。在我的代码中,它输入正确。我会纠正它我看了上下文,看到它已经附加。我再次尝试分离和附加,但没有帮助您从存储库获得培训,但没有修改其任何属性。你只是说它的状态被修改了。