簡體   English   中英

雖然有PK,但Context.SubmitChanges()沒有更新

[英]Context.SubmitChanges() not updating despite having a PK

我遇到了C#中linq到DB實現提供的SubmitChanges函數的問題。 當我運行該命令時,沒有任何內容拋出錯誤,但記錄永遠不會更新。 我已經查找了這個問題,幾乎每個人都說它與桌子有問題,沒有什么是主鍵。 但是我的表有一個主鍵分配給它,但SubmitChanges沒有發生。 為了概述我正在執行的內容,我在這里是一個示例:

public void setApproval(string approvalCode, int ID)
{
    using (DatabaseDataContext context = new DatabaseDataContext(DBConnection().getConnectionString()))
    {
        myRecord con = getRecord(ID); //Gets the record succesfully, PK field in tact
        con.ApprovalStatus = approvalCode;

        context.SubmitChanges();
    }
}

如上所述,記錄成功獲得所有數據,包括用於識別它的PK字段。 數據庫連接用戶有權更新表,但在這里我希望它能夠破解和抱怨。

有任何想法嗎? 如果我沒有提供足夠的信息,請告訴我。 任何幫助是極大的贊賞!

您應該通過上下文獲取對象

public void setApproval(string approvalCode, int ID)
{
    using (DatabaseDataContext context = new DatabaseDataContext(DBConnection().getConnectionString()))
    {
        myRecord con = context.TableName.First(item => item.ID == ID); //Gets the record succesfully, PK field in tact
        con.ApprovalStatus = approvalCode;

        context.SubmitChanges();
    }
}

當您通過Context獲取對象時,它會跟蹤您所做的更改,然后將這些更改保存在SubmitChanges上

getRecord(ID)在哪里獲取其上下文以返回記錄? 它沒有傳遞給方法,所以我假設它使用不同的上下文。 SubmitChanges()只會看到當前上下文的更改,而不會看到getRecord(ID)使用的上下文。

您是在檢查數據是使用代碼還是使用獨立的數據庫工具更新的?

如果在代碼中,您的讀取代碼與編寫代碼一樣可疑:當沒有通用API的兩個應用程序通過數據庫進行通信時,我遇到了類似的問題。 上下文不是現在數據庫中的內容的反映,並且沒有任何告訴它刷新的數據將完全解決問題。 如果需要檢查數據庫中是否有其他程序或線程輸入的內容,則必須創建新的數據庫上下文對象以檢查數據庫。 舊數據庫上下文對象可能仍具有最近更新之前的舊數據。

您的getRecord函數需要創建一個新的上下文或將您剛剛編輯的當前上下文作為參數。 如果它使用靜態或類級別上下文,則它將不具有最新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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