【问题标题】:asp.net web api server data not syncing with database between BLasp.net web api服务器数据不与BL之间的数据库同步
【发布时间】:2022-01-29 23:05:47
【问题描述】:

您好,我是服务器和 REST API 的新手,我正在尝试从动态创建的表中提取数据,但数据与数据库中的数据不同步。 我有一个 sql 数据库,我从中提取了 asp.net web 项目中的实体数据库。

这是一个实体类的 GET 示例(存在于数据库中):

    public class EmployeeBL
{
    private FSProject1Entities db = new FSProject1Entities();

    public List<Employee> GetEmployees(string fname, string lname, string depID)
    {
        return GetEmployeeSearchResult(fname, lname, depID);        
    }
}

这是我创建的类中的方法的示例,用于合并来自 2 个表的数据:

public class ShiftEmployeeDataBL
{
    private FSProject1Entities db = new FSProject1Entities();

     private List<ShiftEmployeeDataBL> GetEmployeeByShiftID(int id)
    {
        List<ShiftEmployeeDataBL> shiftEmpData = new List<ShiftEmployeeDataBL>();
        foreach (Employee emp in db.Employee)
        {//build list... }
        return shiftEmpData;
    }

我的问题是通过这个 GET 请求路径 (ShiftEmployeeData) 的 db.Employee 是旧数据,而通过 Employee GET 请求是好的数据(假设数据是通过 Employee 路径更新的)。

反之亦然 - 如果我通过 ShiftEmployeeData 类更新 Employee,它将显示为 ShiftEmployeeData 类的好数据,而不是为 Employee 更新。

我有两个类的 API 控制器。 怎么了?我觉得我错过了什么。 我尝试在浏览器中关闭缓存选项。

更新详细说明代码:

实体员工:

   public partial class Employee
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int StartWorkYear { get; set; }
    public int DepartmentID { get; set; }
}

员工更新(由 db 生成的实体模型代码自动生成):

 public void UpdateEmployee(int id, Employee employee)
    {
        Employee  emp= db.Employee.Where(x => x.ID == id).First();

        emp.FirstName = employee.FirstName;
        emp.LastName = employee.LastName;            
        emp.StartWorkYear = employee.StartWorkYear;
        emp.DepartmentID = employee.DepartmentID;
        
        db.SaveChanges();
    }

employeeshiftdata 类(不是 db 表,但仍在模型文件夹中):

    public class EmployeeShiftData
{
    public int ID { get; set; }  //EmployeeID
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int StartWorkYear { get; set; }
    public string DepartmentName { get; set; }
    public List<Shift> Shifts { get; set; }
}

employeeshift GET 部分控制器:

   [EnableCors(origins: "*", headers: "*", methods: "*")]
public class EmployeeShiftDataController : ApiController
{
    private static EmployeeShiftDataBL empShiftDataBL = new EmployeeShiftDataBL();
    // GET: api/EmployeeShiftData
    public IEnumerable<EmployeeShiftData> Get(string FirstName = "", string LastName = "", string Department = "")
    {
        return empShiftDataBL.GetAllEmployeeShiftData(FirstName, LastName, Department);
    }
//...
}

【问题讨论】:

    标签: rest asp.net-web-api


    【解决方案1】:

    需要查看与数据库交互的代码,尤其是进行更新的代码。

    如果更改是使用实体框架编写的,模型本身是否与导航属性正确关联?

    public class Employee
    {
      public int Id { get; set; }
      public string Name { get; set; }
      public List<EmployeeShift> EmployeeShifts { get; set; }
      // etc.
    }
    
    public class EmployeeShift
    {
      public int Id { get; set; }
      public Int EmployeeID { get; set; }
      public Employee Employee { get; set; }
      // etc.
    }
    

    如果这些都很好,并且实体框架的上下文跟踪涵盖了这两个模型,那么都应该更新。

    【讨论】:

    • 我相信通过实体自动生成创建的模型应该很好。对于我创建的那些,我确实创建了一个类、一个 BL 和一个 ApiController。如果有帮助,我会发布课程。不过,我不确定您所说的上下文跟踪是什么意思。
    • 我不需要 EmployeeShiftData 将数据保存为 EmployeeShiftData 对象,所以我没有手动将其添加到 DbContext 如果这是您所指的,但我真的应该这样做吗?它只返回 DbContext 中已有类的数据。
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多