Linq to sql 从模型更新数据库行

Linq to sql 从模型更新数据库行,linq-to-sql,asp.net-mvc-2,Linq To Sql,Asp.net Mvc 2,我在使用Linq2Sql更新数据库中的一行时遇到了一些问题 在我的模型内部,我有两种方法来更新和保存我的控制器,然后控制器从我的视图接收更新的模型 我的模型方法如下: public void Update(Activity activity) { _db.Activities.InsertOnSubmit(activity); } public void Save() { _db.SubmitChanges(); } 控制器中的代码如下所示: [HttpPost] publ

我在使用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);
}

在使用InsertOnSubmit方法的情况下应该有一个insert,这是一种预期的行为

我们建议在Update()方法实现中使用Attach()方法。如果实体中有IsVersion列,那么一切都很简单,在另一种情况下,您还必须将原始值传递给Attach调用。更多信息可用。

我通过在更新方法中重新获取和更新我的对象解决了此问题

我没有尝试重新连接或获取数据上下文,而是意识到它是属于它的同一个对象,而我基本上是这样做的:

IMyDataContext _db;

public ActivitiesModel(IMyDataContext db)
{
    _db = db;
}
[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创建了另一个分部类,并将更新代码存储在其中。

我可能完全不正确,但我想问题在于datacontext的实例化方式。嗨,Ahman。我的数据上下文是使用DI实例化的。我将用实例化代码更新我的问题。虽然使用DI,但datacontext、transient、singleton、per web请求等的生活方式是什么。除非您指定,否则您选择的DI容器的默认生活方式可能有效。我在这里猜测:)