[英]Linq to Sql's SubmitChanges not saving to the underlying tables
我有一個代碼:
MyDataClassesDataContext dc = new MyDataClassesDataContext();
Table<FormsAuthorisation> databaseAuthorisation = GetFormsAuthorisation();
Table<ADForm> databaseForms = GetADForm();
foreach (var auth in authorisation)
{
var databaseAuth = databaseAuthorisation.Where(p => p.GroupID == auth.GroupID && p.FormID == auth.FormID).FirstOrDefault();
databaseAuth.CanRead = auth.CanRead;
databaseAuth.CanWrite = auth.CanWrite;
dc.SubmitChanges();
}
foreach (var form in forms)
{
var databaseForm = databaseForms.Where(p => p.FormID == form.FormID).FirstOrDefault();
databaseForm.FormDescription = form.FormDescription;
dc.SubmitChanges();
}
dc.SubmitChanges();
此代碼根本不保存任何更新的值。
我用Google搜索了很長時間但沒有取得好成績
我的所有表都定義了主鍵。
我想說這很簡單,因為你從不同的數據上下文中提取databaseAuthorisation
(通過GetFormsAuthorisation
方法)。 您實際上並未對dc
進行任何更改。 因此,當您提交更改時,上下文不會進行任何更改。
這同樣適用於databaseForms
。
選項是您可以重載方法以允許傳入和使用dc
數據上下文。 或者,您可以在此代碼塊中復制方法的功能。 顯然,如果方法應用任何合理數量的邏輯,復制並不理想。
例如:
public Table<FormsAuthorisation> GetFormsAuthorisation()
{
MyDataClassesDataContext dc = new MyDataClassesDataContext();
return GetFormsAuthorisation(dc);
}
public Table<FormsAuthorisation> GetFormsAuthorisation(MyDataClassesDataContext dc)
{
//do whatever you already do inside your GetFormsAuthorisation function using dc parameter
}
現在,您仍然可以使用沒有param的函數進行只讀執行(例如查看記錄),您可以使用重載版本來修改記錄:
MyDataClassesDataContext dc = new MyDataClassesDataContext();
Table<FormsAuthorisation> databaseAuthorisation = GetFormsAuthorisation(dc);
//make any changes
dc.SubmitChanges();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.