C#データモデルのカスタムセッターを作成する方法がわかりません。シナリオは非常に単純です。パスワードをSHA256関数で自動的に暗号化する必要があります。 SHA256関数は非常にうまく機能します(私は以前に何億ものプロジェクトで使用しました)。
私はいくつかのことを試しましたが、実行するとupdate-database
再帰的に何かを実行しているようで、Visual Studioがハングします(エラーを送信しないでください)。モデルでパスワードをデフォルトで暗号化する方法を理解するのを手伝ってください。
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
[Required]
public string Password
{
get
{
return this.Password;
}
set
{
// All this code is crashing Visual Studio
// value = Infrastructure.Encryption.SHA256(value);
// Password = Infrastructure.Encryption.SHA256(value);
// this.Password = Infrastructure.Encryption.SHA256(value);
}
}
}
Seed
context.Administrators.AddOrUpdate(x => x.Username, new Administrator { Username = "admin", Password = "123" });
プライベートメンバー変数をバッキングフィールドとして使用する必要があります。これにより、値を個別に保存し、セッターで操作できます。
良い情報 ここ
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
private string _password;
[Required]
public string Password
{
get
{
return this._password;
}
set
{
_password = Infrastructure.Encryption.SHA256(value);
}
}
}
使用しているgetとsetは、実際にはget_Password()
およびset_Password(password)
と呼ばれるメソッドを作成します。
実際のパスワードをプライベート変数に保存する必要があります。したがって、これらの「メソッド」によって返され、更新されるプライベート変数を用意するだけで済みます。
public class Administrator
{
public int ID { get; set; }
[Required]
public string Username { get; set; }
[Required]
private string password;
public string Password
{
get
{
return this.password;
}
set
{
this.password = Infrastructure.Encryption.SHA256(value);
}
}
}