首页 > 解决方案 > 实体框架和关系有问题

问题描述

我很难理解如何与实体框架建立关系。(我正在使用MVC架构和代码优先迁移)例如,如果我有一个类

public class Employee
{
    public int Id { get; set; }
    public string PIN { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

我还有另一堂课,比如说我希望跟踪员工的工作时间

public class EmployeeHours
{
    public int Id { get; set; }
    public DateTime? ClockIn { get; set; }
    public DateTime? ClockOut { get; set; }
    public Employee emplyee { get; set; }
}

我很难理解如何让这两个类相互交互。就像 John Smith 的 PIN 是1234,并且他将他的 PIN 输入到文本框中,我如何成功地将他的时钟时间和日期添加到员工小时课程中?

如果我有一个看起来像这样的视图,让员工输入他们的 PIN

@using (Html.BeginForm("ClockIn", "Login")) 
{
    @Html.LabelFor(c => c.Employee.PIN)
    @Html.TextBoxFor(c => c.Employee.PIN)<br />

    <button type="submit">Save</button>
}

clockIn控制器看起来像这样

[HttpPost]
public ActionResult ClockIn(string Pin)//employee clocking in
{            
  _context.EmployeeHours.Add();
  _context.SaveChanges();

  return View();
}

我正试图弄清楚如何在课堂上存储与该员工相关的时间和日期,以便我可以回去查看该员工何时打卡。谢谢!

标签: c#asp.net-mvcentity-framework

解决方案


导航属性添加到 Employee, EG:

public class Employee
{
    public int Id { get; set; }
    public string PIN { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public virtual ICollection<EmployeeHours> Hours { get; } = new HashSet<EmployeeHours>();
}

然后像这样使用它:

[HttpPost]
public ActionResult ClockIn(string pin)//employee clocking in
{
    var emp = _context.Employees.Where(e => e.Pin == pin).First();
    var hours = new EmployeeHours();
    hours.StartTime = DateTime.Now;
    //...
    emp.Hours.Add(hours);
    _context.SaveChanges();
    return View();
}

推荐阅读