代码之家  ›  专栏  ›  技术社区  ›  Jamie Dixon

从模型更新数据库行

  •  0
  • Jamie Dixon  · 技术社区  · 14 年前

    我在使用linq2sql更新数据库中的一行时遇到了一些问题。

    在我的模型内部,我有两种从控制器更新和保存的方法,控制器反过来从我的视图接收更新的模型。

    我的模型方法如下:

    public void Update(Activity activity)
    {
        _db.Activities.InsertOnSubmit(activity);
    }
    
    
    public void Save()
    {
        _db.SubmitChanges();
    }
    

    我的控制器中的代码如下:

    [HttpPost]
    public ActionResult Edit(Activity activity)
    {
        if (ModelState.IsValid)
        {
            UpdateModel<Activity>(activity);
            _activitiesModel.Update(activity);
            _activitiesModel.Save();
        }
        return View(activity);
    }
    

    我遇到的问题是,这段代码向数据库中插入了一个新条目,即使我在提交时插入的模型项包含一个主键字段。

    我还尝试将模型对象重新附加回数据源,但这会引发一个错误,因为该项已经存在。

    任何指向正确方向的指针都将受到极大的赞赏。

    更新:

    我正在使用Dependency注入来实例化我的DataContext对象,如下所示:

    IMyDataContext _db;
    
    public ActivitiesModel(IMyDataContext db)
    {
        _db = db;
    }
    
    2 回复  |  直到 8 年前
        1
  •  0
  •   Devart    14 年前

    在使用insertonSubmit方法的情况下应该有一个insert,这是一个预期的行为。
    我们建议在update()方法实现中使用attach()方法。如果在实体中有isversion列,那么一切都很简单,而在另一种情况下,您还必须将原始值传递给attach调用。更多信息可用 here in MSDN .

        2
  •  0
  •   gevorg Dathan    8 年前

    我通过在更新方法中重新获取和更新对象来解决这个问题。

    我没有尝试重新附加或获取数据上下文来意识到它是属于它的同一个对象,我基本上做了如下操作:

    [HttpPost]
    public ActionResult Edit(Activity activity)
    {
      Activity myActivity = activitiesModel.getActivityById(activity.id);
      myActivity.name = activity.name;
      myActivity.date = activity.date;
      _dbContext.SubmitChanges();
      return View(activity);
    }
    

    这不是我的确切代码,更准确地说,我为DataContext创建了另一个分部类,并将更新代码存储在其中。