c# - 实体框架和关系有问题
问题描述
我很难理解如何与实体框架建立关系。(我正在使用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();
}
我正试图弄清楚如何在课堂上存储与该员工相关的时间和日期,以便我可以回去查看该员工何时打卡。谢谢!
解决方案
将导航属性添加到 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();
}
推荐阅读
- javascript - 在环回中使用自定义中间件进行用户授权
- python - Tornado:如何记录所有 API 请求的响应
- android-gradle-plugin - 编译糖 ORM 时生成错误
- javascript - 将数据从浏览器 Javascript 传递到 Delphi 应用程序
- android - 1080x1920 420dpi 屏幕无法从 sw420dp 访问
- gmail - SBOMAILER 配置 sap 业务一
- r - 当我需要从时间变量中提取小时时出错
- git - Google 源代码库的最大大小是多少?
- rmi - java.rmi.ServerError:服务器线程发生错误;嵌套异常是:
- c++ - Clang 错误:使用“模板”关键字将 X 视为依赖模板名称