我在使用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);
}
我遇到的问题是这段代码会在数据库中插入一个新条目,即使我在插入提交的模型项包含一个主键字段。
我也尝试将模型对象重新附加回数据源,但这会引发错误,因为该项已经存在。
非常感谢任何正确方向的指示。
更新
我正在使用依赖注入实例化我的datacontext对象,如下所示:
IMyDataContext _db;
public ActivitiesModel(IMyDataContext db)
{
_db = db;
}
答案 0 :(得分:0)
如果使用InsertOnSubmit方法,则应该有一个插入,这是一种预期的行为。
我们建议您在Update()方法实现中使用Attach()方法。如果您在实体中有IsVersion列,那么一切都很简单,在另一种情况下,您还必须将原始值也传递给Attach调用。有关详细信息,请 here in MSDN。
答案 1 :(得分:0)
我通过在Update方法中重新获取和更新我的对象来修复此问题。
而不是尝试重新附加或获取数据上下文以实现它是属于它的相同对象之前我基本上做了如下:
[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创建了另一个部分类,并将更新代码存储在那里。