Исходя из моего последнего вопроса , я попытался полностью отделить бизнес-логику от моего контроллера.
Это, однако, оставило проблему, которую я понимаю почему, но не как исправить.... И я не понимаю, почему он делает то, что делает.
В моем контроллере у меня было следующее:
public User GetCurrentUser()
{
User user = db.Users.SingleOrDefault(x => x.UserName == User.Identity.Name);
return user;
}
Теперь я знаю о [NonAction]
, которыйустраняет проблему безопасности - однако я знаю, что это не следует передовым практикам, когда в контроллере нет никаких компонентов, не относящихся к контроллеру.По этой причине я перешел на новый класс и изменил его следующим образом:
public User GetCurrentUser(string name)
{
User user = db.Users.SingleOrDefault(x => x.UserName == name);
return user;
}
У меня есть метод редактирования, который до этого просто устанавливал различные поля в пользовательском объекте, а затем вызывал db.SaveChanges()
.Это, однако, в настоящее время вызывает проблемы - я полагаю, что это происходит из-за вызова команды для объекта db
, который на самом деле не загружен объект.
Но часть, которую я действительно не понимаю, - это когда меня перенаправляют обратно на домашнюю страницу и снова выполняют GetCurrentUser()
, мне предоставляют отредактированные данные, которые я изменил ... Они не сохраняются вбаза данных, и только когда я перезапускаю приложение, оно возвращается к результатам базы данных.
Я нахожу это очень запутанным!Что здесь происходит и где хранится объект?
И как мне это исправить?Я попытался сделать функцию БД нового класса общедоступной и вызвать ее метод SaveChanges()
, но это приводит к той же самой проблеме - данным, которые не сохраняются в базе данных.
Во всяком случае, честно говоря, яМне действительно нравилось вызывать его через GetCurrentUser()
, я хотел этого, потому что хотел изменить способ загрузки пользователя в будущем - но теперь, когда мне нужно вызвать его через GetCurrentUser(User.Identity.Name)
, и сделать другие изменения,Я думаю, что будет не намного сложнее просто пропустить метод и напрямую вызвать лямбда-запрос ... Кажется, это избавит вас от многих проблем.