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从数据库中检索......为什么不只是 updatethis的属性。我想我需要通过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

要对您的代码进行故障排除,请尝试以下任何建议:

  • 在调试代码时,我会假设您的对象不为空。
  • 确保您的属性实际更改。您使用管道前缀字段名称很奇怪,但无论哪种方式:在调试时,请检查您的属性是否确实具有新值。
  • 使用 SQL Server Profiler 捕获发送到数据库服务器的 SQL 语句。然后,您将能够在 SQL Management Studio 中重新运行此 UPDATE 查询,并确定有多少记录受到影响。您还可以看到在 UPDATE 语句中传递的值。
于 2011-02-05T03:17:01.283 回答
0

Ved 指出了一个可能的问题。万一这不起作用,您应该仔细检查您的 LINQ to SQL 类的AdminUser类定义,并确保生成的代码实现了INotifyPropertyChangingINotifyPropertyChanged接口。在某些情况下,设计人员不会实现这些接口,这会阻止更新工作。例如,不声明主键。

于 2011-02-05T03:28:52.973 回答