如何解析上下文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"); 
    }
}

如何解析上下文id

尝试使用已保存的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>();
}