2

ここでは壊れたレコードのようには聞こえませんが(このような投稿がいくつかあります)、どれも私の問題を解決していないようです。更新したいときのようです

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と思います。

4

4 に答える 4

4

プライベート値ではなく、パブリックプロパティを設定する必要があります。

  // 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は変更を追跡しません。

于 2011-02-05T16:18:34.593 に答える
3

DJ,

本気ですか

user._EncryptedPassword , 
user._PasswordSalt 

プロパティですか?LINQ TO SQL はパブリック プロパティとプライベート プロパティを作成すると思います。

それらを設定できますか

user.EncryptedPassword , 
user.PasswordSalt

このような ?

ヴェド

于 2011-02-05T03:09:43.540 に答える
0

Ved は、考えられる問題を 1 つ指摘しました。これが機能しない場合に備えて、LINQ to SQL クラスのAdminUserクラス定義を再確認し、生成されたコードがINotifyPropertyChangingおよびINotifyPropertyChangedインターフェイスを実装していることを確認してください。デザイナーがこれらのインターフェイスを実装しない場合があり、更新が機能しなくなります。たとえば、主キーを宣言していません。

于 2011-02-05T03:28:52.973 に答える
0

コードのトラブルシューティングを行うには、次の提案のいずれかを試してください。

  • コードのデバッグ中は、オブジェクトが null ではないと仮定します。
  • プロパティが実際に変更されていることを確認してください。パイプ プレフィックス付きのフィールド名を使用しているのは奇妙ですが、いずれにしても、デバッグ中に、プロパティに実際に新しい値があることを確認してください。
  • SQL Server Profiler を使用して、データベース サーバーに送信された SQL ステートメントをキャプチャします。次に、この UPDATE クエリを SQL Management Studio に再実行して、影響を受けるレコードの数を確認できます。UPDATE ステートメントで渡された値を確認することもできます。
于 2011-02-05T03:17:01.283 に答える