Pregunta

No para sonar como un disco roto aquí (allí algunas publicaciones que se ven así) pero ninguna de ellas parece resolver mi problema. Parece que cuando quieres actualizar

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;
    }
}

Tal vez esta sea una pregunta tonta pero estoy recuperando this de la DB ... ¿Por qué no solo actualizar thisPropiedades. Supongo que necesito atravesarlo DBContext Supongo.

¿Fue útil?

Solución

Debe establecer las propiedades públicas y no los valores privados.

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

Esto no activará ninguna actualización.

Incluso si lo haces:

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

Esto tampoco activará ningún cambio, ya que realmente no está cambiando los valores

Puedes hacer algo como

 string newEncryptedPassword;
 string newPasswordSalt;

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

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

También verifique que su tabla tenga una clave primaria; de lo contrario, Linq no rastreará los cambios.

Otros consejos

DJ,

Está seguro

user._EncryptedPassword , 
user._PasswordSalt 

son las propiedades? Creo que Linq a SQL crea propiedades públicas y privadas.

¿Puedes configurarlos?

user.EncryptedPassword , 
user.PasswordSalt

como esto ?

Ved

Para solucionar problemas de su código, pruebe cualquiera de estas sugerencias:

  • Al depurar el código, asumiré que su objeto no es nulo.
  • Asegúrese de que sus propiedades realmente se cambien. Es extraño que esté utilizando nombres de campo prefijados por tuberías, pero de cualquier manera: mientras depuración, verifique que sus propiedades realmente tengan nuevos valores.
  • Use SQL Server Profiler para capturar la instrucción SQL enviada al servidor de la base de datos. Luego podrá volver a ejecutar esta consulta de actualización en SQL Management Studio y determinar cuántos registros se efectúan. También podrá ver los valores aprobados en la declaración de actualización.

Ved señaló un posible problema. En caso de que eso no funcione, debe verificar su clase LINQ a SQL ' AdminUser Definición de clase y asegúrese de que el código generado implementa el INotifyPropertyChanging y INotifyPropertyChanged interfaces. Hay algunos casos en los que el diseñador no implementará estas interfaces que evitan que las actualizaciones funcionen. Por ejemplo, no declarar una clave primaria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top