簡體   English   中英

LINQ:SubmitChanges()不更新我的記錄

[英]LINQ: SubmitChanges() not updating my record

這里聽起來不像是破記錄(有幾篇帖子看起來像這樣),但似乎沒有一個解決我的問題。 看來,當您要更新時

private bool resetPassword(string password)
{
    try
    {
       var db = new SchedulerDBDataContext();

       // since this is a instance method, I grab the ID from _this_
       AdminUser user = db.AdminUsers.SingleOrDefault(t => t.ID == _ID);

       if (user != null)
       {
           // this method DOES update these two fields.
           SchedUtil.md5Hash(password, ref user._EncryptedPassword, ref user._PasswordSalt);

           // I threw these in there to try something... it didn't work.
           //user._EncryptedPassword = user.EncryptedPassword;
           //user._PasswordSalt = user.PasswordSalt;

           // this DOESN'T do anything.
           db.SubmitChanges();
           return true;
       }

       return false;
    }
    catch (Exception)
    {
        return false;
    }
}

也許這是一個愚蠢的問題,但是我正在從數據庫中檢索this ……為什么不僅僅更新this的屬性。 我猜想我需要通過DBContext將其拉出。

您應該設置公共屬性,而不是私有值。

  // I threw these in there to try something... it didn't work.
       //user._EncryptedPassword = user.EncryptedPassword;
       //user._PasswordSalt = user.PasswordSalt;

這不會觸發任何更新。

即使您這樣做:

      user.EncryptedPassword = user._EncryptedPassword;
      user.PasswordSalt      = user._PasswordSalt;

這不會觸發任何更改,因為您實際上並未更改值

你可以做點什么

 string newEncryptedPassword;
 string newPasswordSalt;

 SchedUtil.md5Hash(password, ref newEncryptedPassword, ref newPasswordSalt);

 user.EncryptedPassword = newEncryptedPassword;
 user.PasswordSalt      = newPasswordSalt;

還要檢查您的表是否具有主鍵,否則Linq將不會跟蹤更改。

DJ,

你確定嗎

user._EncryptedPassword , 
user._PasswordSalt 

是屬性嗎? 我認為您LINQ TO SQL創建公共和私有屬性。

你可以設置它們嗎

user.EncryptedPassword , 
user.PasswordSalt

像這樣 ?

維德

要對代碼進行故障排除,請嘗試以下任何建議:

  • 在調試代碼時,我將假定您的對象不為null。
  • 確保您的屬性實際上已更改。 奇怪的是,您使用的是管道前綴字段名,但是無論哪種方式:調試時,請檢查您的屬性是否確實具有新值。
  • 使用SQL Server Profiler捕獲發送到數據庫服務器的SQL語句。 然后,您可以將這個UPDATE查詢重新運行回SQL Management Studio,並確定影響了多少條記錄。 您還將能夠看到在UPDATE語句中傳遞的值。

Ved指出了一個可能的問題。 萬一這行不通,您應該仔細檢查LINQ to SQL類的AdminUser類定義,並確保生成的代碼實現INotifyPropertyChangingINotifyPropertyChanged接口。 在某些情況下,設計人員將不會實現這些接口,從而阻止更新工作。 例如,不聲明主鍵。

暫無
暫無

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

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