Я пытаюсь создать приложение ASP.NET MVC с использованием подхода, основанного на коде, в Entity Framework 4.1, и меня немного смущает, как обрабатывать проверку в следующем сценарии:
Допустим, у меня есть простой класс User, использующий DataAnnotations для проверки:
public class User
{
public int UserId { get; set; }
[Required]
[StringLength(500)]
public string Email { get; set; }
[Required]
[StringLength(50)]
public string Salt { get; set; }
[Required]
[StringLength(50)]
public string HashedPassword { get; set; }
public void SetPassword(string password)
{
if (string.IsNullOrWhiteSpace(Salt))
Salt = Guid.NewGuid().ToString();
HashedPassword = FormsAuthentication.HashPasswordForStoringInConfigFile(string.Concat(password, Salt), "sha1");
}
}
Обратите внимание, что здесь для вызывающих абонентов предполагается использовать процедуру SetPassword, чтобы установить пароль для объекта User. Это автоматически сгенерирует соль, если ее не существует, и использует ее для хеширования пароля для хранения в базе данных.
Теперь предположим, что я создаю UsersController следующим образом:
public class UsersController : Controller
{
[HttpGet]
public ActionResult Register()
{
return View();
}
[HttpPost]
public ActionResult Register(User user)
{
if (!ModelState.IsValid)
return View(user);
// Save user to database
return RedirectToAction("Index", "Home");
}
}
Мои вопросы:
- Моя форма будет содержать поля для имени пользователя, адреса электронной почты и пароля. Имя пользователя и адрес электронной почты должны отображаться на «пользователя» просто отлично через связыватель модели по умолчанию. Но как мне заставить механизм связывания взять введенный пароль и вызвать с ним мою функцию SetPassword? Нужно ли использовать для этой цели специальную модель? Если так, как я могу гарантировать, что проверки DataAnnotation все еще выполняются?
- Мне бы очень хотелось, чтобы свойства Salt и HashedPassword в моем классе User были доступны только для чтения. Есть ли способ сделать это, который все еще позволяет Entity Framework устанавливать эти свойства при загрузке пользователя из базы данных?