您好,我是服务器和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);
}
}
这是我创建的类中的一个方法的例子,该类用于组合两个表中的数据:
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请求路径的Employee(ShiftEmployeeData(是旧数据,通过EmployeeGET请求是好数据(假设数据是通过Employer路径更新的(。
反之亦然——如果我通过ShiftEmployeeData类更新Employee,它将显示为ShiftEmpEmployeedData类的好数据,而不会更新Employer。
我有两个类的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; }
}
员工更新(通过从数据库生成实体模型代码自动生成(:
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类(不是数据库表,但仍在models文件夹中(:
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获取控制器的一部分:
[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);
}
//...
}
需要查看与数据库交互的代码,尤其是进行更新的代码。
如果更改是用实体框架编写的,那么模型本身是否与导航属性正确相关?
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.
}
如果这些都很好,并且实体框架的上下文跟踪涵盖了这两个模型,那么这两个都应该更新。