如何解析上下文id
本文关键字:id 上下文 何解析 | 更新日期: 2023-09-27 18:15:37
我有一个名为companyContext的上下文。有三个表报告,日志和员工。我试图将另一个Employee添加到我的员工表中,但是我有一个表Reports,它跟踪哪些员工属于case (CaseID),以及是否有发生的日志。在我将员工添加到上下文之后,我需要添加一个带有刚刚添加的员工id的Report(这是一个主键,因此它不会与employee变量一起传递)。我能想到的唯一方法是获取雇员表的当前计数。这似乎是不好的做法。有更好的方法来实现这一点吗?
澄清:
我正在从我的客户端发送一个Employee Employee对象。名称和代码是对象中唯一不为空的东西。
public async Task<IActionResult> addEmployee([FromBody] Employee employee) {
try {
context.Employees.Add(employee);
var c = storage.GetCase(employee);
var employeeId = await context.Employees.CountAsync();
var report = new Report {
CaseID = c.Id,
EmployeeID = employeeId,
};
context.Reports.Add(report);
return Json(employee);
} catch (Exception ex){
logger.LogError("Employee exception in Company Controller", ex);
return BadRequest("Unexpected Error");
}
}
模型public class Log
{
public int ID { get; set; }
public string Input { get; set; }
public string Tag { get; set; }
public DateTime LogDate { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string Code { get; set; }
public string Name { get; set; }
public ICollection<Report> Reports { get; set; }
}
public class Report
{
public int ID { get; set; }
public string CaseID { get; set; }
public int EmployeeID { get; set; }
public int? LogID { get; set; }
public Employee Employee { get; set; }
public Log Log { get; set; }
}
情况
public async Task<IActionResult> addEmployee([FromBody] Employee employee) {
try {
context.Employees.Add(employee);
await context.SaveChangesAsync();
var c = storage.GetCase(employee);
var report = new Report {
CaseID = c.Id,
EmployeeID = employee.ID,
};
context.Reports.Add(report);
await context.SaveChangesAsync()
return Json("Worked");
} catch (Exception ex){
logger.LogError("Employee exception in Company Controller", ex);
return BadRequest("Unexpected Error");
}
}
尝试使用已保存的EmployeeId,即
var report = new Report {
CaseID = c.Id,
EmployeeID = employee.ID
};
保存时应该直接获取ID。
问题,有什么具体的原因为什么你没有使用"虚拟方法"在你的实体延迟加载?
我还会考虑如果context.reports.add(report)失败而employee add没有失败会发生什么。
不这样做:
context.Reports.Add(report);
你可以这样做:
employee.Reports.Add(report);
当保存员工记录时,它将知道在将其保存到数据库之前在Report对象中设置EmployeeID值。
您可能还需要在Employee对象中添加这个,以确保设置了Report集合:
public Employee()
{
Reports = new HashSet<Report>();
}