Я использую Entity Framework 4.2 (Code First) для создания своей базы данных, которая до сих пор работала нормально, но сейчас сталкиваюсь с проблемой, которую очень легко решить в Hibernate или JPA, но я не могу ее здесь увидеть.
Я определил объект User, у которого есть свойство с именем Password. Я хочу настроить операции {get; set;}, чтобы иметь определенную логику при установке пароля (я хочу сохранить его хеш-версию, но я хочу эту логику в моем доменном объекте аля DDD). Но я столкнулся с тем, что при материализации объекта из базы данных вызывается мой установщик, и он не использует непосредственно закрытое поле.
Я пытаюсь построить объектную модель Rich Domain и избегаю использования шаблона DAO / Repository.
Возможно ли это через Entity Framework или я буду вынужден использовать шаблоны DAO / Repository.
Ниже приведено извлечение моего объекта User:
public class User
{
[Key]
public string LoginId { get; set; }
[Required]
private string password;
public string Password
{
get { return password; }
set {
//Random Salt
byte[] s;
using (RNGCryptoServiceProvider prov = new RNGCryptoServiceProvider())
{
s = new byte[20];
prov.GetBytes(s);
}
this.salt = Convert.ToBase64String(s);
//Random salt
password = ComputeHash(value);
}
}
[Required]
private string salt;
public string Salt {
get { return this.salt; }
set { throw new InvalidOperationException("Salt is not an assignable property. Assign a password first to your model and a Salt will get created."); }
}
public bool ValidatePassword(string clearTextPassword)
{
return this.Password == this.ComputeHash(clearTextPassword);
}
public string ComputeHash(string value)
{
...
return hashVersion of value;
}
}