0

我有一个代码:

        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了很久但是没有好的结果

我所有的表都定义了主键。

4

1 回答 1

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
}

现在,您仍然可以使用不带参数的函数进行只读执行(例如查看记录),并且可以使用重载版本来允许修改记录:

MyDataClassesDataContext dc = new MyDataClassesDataContext();
Table<FormsAuthorisation> databaseAuthorisation = GetFormsAuthorisation(dc);
//make any changes
dc.SubmitChanges();
于 2012-07-30T13:27:46.753 回答