2010-05-31 171 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