簡體   English   中英

Linq to Sql的SubmitChanges沒有保存到基礎表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM