#c# #entity-framework-core #asp.net-core-3.1
Вопрос:
У меня есть тестовая база данных на моем локальном сервере. В базе данных у меня есть таблица под названием «Korisnici» (англ. Пользователи). Используя EntityFrameworkCore, я сгенерировал классы из базы данных, и вот сгенерирован класс «Korisnici» :
public partial class Korisnici
{
public Korisnici()
{
BankovniRacuni = new HashSet<BankovniRacuni>();
Dokumenti = new HashSet<Dokumenti>();
ObracuniZarada = new HashSet<ObracuniZarada>();
Poslodavci = new HashSet<Poslodavci>();
PrihodiPoslodavca = new HashSet<PrihodiPoslodavca>();
RashodiPoslodavca = new HashSet<RashodiPoslodavca>();
Takse = new HashSet<Takse>();
Zaposleni = new HashSet<Zaposleni>();
}
public int Id { get; set; }
public string Ime { get; set; }
public string Prezime { get; set; }
[Required]
[Display(Name = "Korisnicko ime")]
public string KorisnickoIme { get; set; }
public string Email { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Lozinka")]
public string Lozinka { get; set; }
public int? TipKorisnika { get; set; }
public virtual TipoviKorisnika TipKorisnikaNavigation { get; set; }
public virtual ICollection<BankovniRacuni> BankovniRacuni { get; set; }
public virtual ICollection<Dokumenti> Dokumenti { get; set; }
public virtual ICollection<ObracuniZarada> ObracuniZarada { get; set; }
public virtual ICollection<Poslodavci> Poslodavci { get; set; }
public virtual ICollection<PrihodiPoslodavca> PrihodiPoslodavca { get; set; }
public virtual ICollection<RashodiPoslodavca> RashodiPoslodavca { get; set; }
public virtual ICollection<Takse> Takse { get; set; }
public virtual ICollection<Zaposleni> Zaposleni { get; set; }
}
Этот класс используется в качестве модели для одного представления под названием «Index.cshtml».:
@model Korisnici
<img src="/Content/images/LogoFinal.png" />
<div class="row">
<div class="col-md-8">
<section id="loginForm">
@using (Html.BeginForm("Login", "Account"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(m => m.KorisnickoIme, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.TextBoxFor(m => m.KorisnickoIme, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.KorisnickoIme, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(m => m.Lozinka, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.PasswordFor(m => m.Lozinka, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Lozinka, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Uloguj se" class="btn btn-primary" />
</div>
</div>
}
</section>
</div>
</div>
Когда я нажимаю на кнопку «Отправить», вызывается действие входа в систему от контроллера «AccountControler».
public class AccountController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Login(LoginViewModel model)
{
// Acces database and search for account
var dbContext = new AdministracijaZingDevDBContext();
var korisnik = dbContext.Korisnici
.Where(k => k.KorisnickoIme == model.KorisnickoIme)
.Where(k => k.Lozinka == model.Lozinka)
.FirstOrDefault();
if (korisnik != null)
{
HttpContext.Session.SetString("UserName" , model.KorisnickoIme);
return RedirectToAction("Index", "Main");
}
return RedirectToAction("Index", "Home");
}
}
Я вставил данные тестирования в базу данных с одной записью таблицы Korisnici.
Когда я ввожу правильные данные в форму входа в систему, ничего не происходит (пользователь не прошел логин).
Ответ №1:
просто чтобы проверить, вы создали файлы миграции, обновили базу данных и так далее ?
(Это должно быть в комментарии, но мне не хватает репутации)
кроме того, вы не должны создавать новый контекст, а вводить его в конструктор контроллера вашей учетной записи ( или еще лучше … вы должны внедрить репозиторий или лучше использовать единицу работы-дизайн и CQRS-дизайн)
Берегите себя и удачи.
итак, вы вводите ctor tab tab
что дало бы вам
public AccountController(){}
и затем вы добавляете параметр в AccountController-функцию, такую как
public AccountController(MyContext context){}
щелкните правой кнопкой мыши => быстрые действия и рефакторинг =>> создайте и назначьте свойство MyContext
но вы должны создать по крайней мере repositorypattern и ввести что-то вроде IKorisniciRepository.
Было бы проще, если бы вы разместили свое репо на GitHub, чтобы я мог протестировать его перед написанием.
Попробуй
public class AccountController : Controller
{
private readonly AdministracijaZingDevDBContext Context {get;}
public AccountController (AdministracijaZingDevDBContext context) {Context = context;}
public IActionResult Index()
{
return View();
}
[HttpPost]
public IActionResult Login(LoginViewModel model)
{
// Access database and search for account
var korisnik = Context.Korisnici
.Where(k => k.KorisnickoIme == model.KorisnickoIme)
.Where(k => k.Lozinka == model.Lozinka)
.FirstOrDefault();
if (korisnik != null)
{
HttpContext.Session.SetString("UserName" , model.KorisnickoIme);
return RedirectToAction("Index", "Main");
}
return RedirectToAction("Index", "Home");
}
}