这里听起来不像是破纪录(有几个帖子看起来像这个),但似乎没有一个能解决我的问题。看来当你想要更新
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
来猜它。
答案 0 :(得分: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将不会跟踪更改。
答案 1 :(得分:3)
DJ,
你确定
user._EncryptedPassword ,
user._PasswordSalt
属性?我认为你LINQ TO SQL创建了公共和私有属性。
你可以设置它们吗
user.EncryptedPassword ,
user.PasswordSalt
像这样?
韦达
答案 2 :(得分:0)
要对代码进行问题排查,请尝试以下任何建议:
答案 3 :(得分:0)
Ved指出了一个可能的问题。如果不起作用,您应该仔细检查LINQ to SQL类'AdminUser
类定义,并确保生成的代码实现INotifyPropertyChanging
和INotifyPropertyChanged
接口。在某些情况下,设计人员不会实现阻止更新工作的这些接口。例如,不要声明主键。