Я уже несколько часов занимаюсь этой проблемой и не могу ее решить. Поэтому я использую ASP.NET MVC 3 с Entity Framework 4.1. Пишу контроллер управления учетными записями и модели с нуля. Моя проблема заключается в том, что всякий раз, когда Контроллер получает заполненный объект-сущность из Представления и отправляет его далее в Модель, Модель не сохраняет его, если я попытаюсь заранее изменить любое из полей.
Вот соответствующая часть моей модели с именем ModelManager.cs:
public class MemberManager
{
private DAL db = new DAL();
public void Add(Member member)
{
member.Password = Crypto.HashPassword(member.Password);
db.Members.Add(member);
db.SaveChanges();
}
Эта модель получает объект сущности Member member
в качестве параметра от контроллера, соответствующая часть которого ниже:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (ModelState.IsValid)
{
MemberManager memberManager = new MemberManager();
if (!memberManager.UsernameExist(member.Username))
{
memberManager.Add(member);
FormsAuthentication.SetAuthCookie(member.FirstName, false);
return RedirectToAction("Welcome", "Home");
}
else
{
ModelState.AddModelError("", "Username already taken.");
}
}
}
catch
{
ModelState.AddModelError("", "Could not complete account creation. Please try again.");
}
return View(member);
}
Если я удаляю любую модификацию любого свойства объекта сущности в Модели, код работает (т.е. я удаляю строку, где я Crypto.HashPassword
поле Пароль объекта сущности. Сначала я подумал проблема была с HashPassword, но если я изменю эту строку, чтобы просто изменить элемент. Пароль на строку «1», он также не будет работать.
Итак, что я делаю не так? Я совершенно новичок в программировании, так что терпите меня, если проблема довольно вопиющая. Разве невозможно создать объект сущности из представления при создании учетной записи, отправить его через контроллер, который затем передает его в модель, которая изменяет пароль для его хеширования перед сохранением?
Кстати, возникла ошибка исключения:
System.Data.Entity.Validation.DbEntityValidationException: проверка не удалась для одного или нескольких объектов. См. Свойство EntityValidationErrors для более подробной информации. в System.Data.Entity.Internal.InternalContext.SaveChanges () в System.Data.Entity.Internal.LazyInternalContext.SaveChanges () в System.Data.Entity.DbContext.SaveChanges () в Politiq.Models.ObjectManager.MemberManager. (Член-участник) в C: \ Users \ C. Yehia \ Documents \ Visual Studio 2010 \ Projects \ Politiq2 \ Models \ ObjectManager \ MemberManager.cs: строка 21 в Politiq.Controllers.AccountController.Register (член-участник) в C: \ Users \ C. Yehia \ Documents \ Visual Studio 2010 \ Проекты \ Politiq2 \ Controllers \ AccountController.cs: строка 39