我有一个代码:
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();
此代码根本不保存任何更新的值。
我已经谷歌搜索了很长时间但没有很好的结果
我的所有表都定义了主键。
答案 0 :(得分:2)
我想说这很简单,因为你从不同的数据上下文(通过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();