2010-05-31 175 views
0

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

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

我也尝试将模型对象重新附加回数据源,但由于该项已存在,所以会引发错误。

任何指针正确的方向将不胜感激。

UPDATE:

我使用扶养注射到我的实例化DataContext对象如下:

IMyDataContext _db; 

public ActivitiesModel(IMyDataContext db) 
{ 
    _db = db; 
} 
+0

我可能是完全不正确的,但我会猜测问题在于你的datacontext如何实例化。 – Ahmad 2010-06-01 06:18:32

+0

嗨Ahman。我的数据上下文使用DI实例化。我将用实例化代码更新我的问题。 – 2010-06-01 08:46:09

+0

虽然使用DI,但datacontext,transient,singleton,per-web-request等的生活方式是什么。除非您已指定,否则您选择的DI容器的默认生活方式可能会生效。我正在猜测这里 :) – Ahmad 2010-06-01 09:28:03

回答

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创建了另一个部分类,并将更新代码存储在那里。

0

应该有在InsertOnSubmit方法使用的情况下插入,这是一个预期行为。
我们推荐您的Update()方法实现中使用Attach()方法。如果您在实体中有IsVersion列,那么一切都很简单,在另一种情况下,您必须将原始值也传递给Attach呼叫。更多信息可在 here in MSDN