linq:submitchanges()私のレコードを更新しません
-
29-10-2019 - |
質問
ここで壊れたレコードのように聞こえるのではなく(このように見えるいくつかの投稿があります)、それらのどれも私の問題を解決していないようです。更新したいときのようです
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
DBから...なぜ更新しないのですか 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からsqlが公共および私有地を作成していると思います。
それらを設定できますか
user.EncryptedPassword ,
user.PasswordSalt
このような ?
ved
コードをトラブルシューティングするには、これらの提案のいずれかを試してください。
- コードをデバッグしている間、私はあなたのオブジェクトがnullではないと仮定します。
- プロパティが実際に変更されていることを確認してください。パイプで処理されたフィールド名を使用しているのは奇妙ですが、どちらにしても、デバッグ中は、プロパティが実際に新しい値を持っていることを確認してください。
- SQL Server Profilerを使用して、データベースサーバーに送信されたSQLステートメントをキャプチャします。その後、このアップデートクエリをSQL Management Studioに再実行し、実行されるレコードの数を判断することができます。また、更新ステートメントで渡された値を確認することもできます。
Vedは、1つの可能な問題を指摘しました。それがうまくいかない場合に備えて、LINQをSQLクラスに再確認する必要があります」 AdminUser
クラスの定義と、生成されたコードが実装されることを確認してください INotifyPropertyChanging
と INotifyPropertyChanged
インターフェイス。デザイナーがこれらのインターフェイスを実装しない場合があり、更新が機能するのを防ぎます。たとえば、主キーを宣言していません。
所属していません StackOverflow