无法为单个StaffId添加多个关联DepartmentId的问题求助
无法为单个StaffId添加多个关联DepartmentId的问题求助
大家好,我最近在开发一个功能时卡壳了:我想给某个特定的StaffId关联多个DepartmentId,目前已经能实现一个StaffId对应一个DepartmentId,但尝试给同一个StaffId绑定多个部门ID时就失败了。
具体来说,我是通过staffToD.StaffId来关联对应的staffToD.DepartmentId,这些属性的赋值逻辑分散在不同类的方法里,下面我把相关代码和配置都贴出来,麻烦大家帮忙看看问题出在哪。
相关代码与配置
1. 添加Staff的核心方法
public ConnectionController DC = new ConnectionController(); public bool WorkInAdmin { get; set; } public bool WorkInDev { get; set; } public bool WorkInSales { get; set; } public bool WorkInOps { get; set; } public void AddStaff(string staffSocialSecNumber, string sName, double sWage, double staffDegreeOfEmp, double sStaffVakancy, double sAdminWork, double sSalesWork, double sOperationWork, double sDevWork, double sArsArbete, double sAllocatingControll, bool sLockStaff) { try { Staff newStaff = new Staff(); newStaff.StaffId = 0; newStaff.StaffSocialSecNumber = staffSocialSecNumber; newStaff.StaffName = sName; newStaff.StaffWage = sWage; newStaff.StaffDegreeOfEmp = staffDegreeOfEmp; newStaff.StaffVakancy = sStaffVakancy; newStaff.AllocatingControll = sAllocatingControll; double wT = staffDegreeOfEmp - sStaffVakancy; newStaff.WorkingTime = wT; newStaff.AdminWork = sAdminWork; if (sAdminWork != 0) { newStaff.WorkInAdmin = true; WorkInAdmin = true; } newStaff.DevWork = sDevWork; if (sDevWork != 0) { newStaff.WorkInDev = true; WorkInDev = true; } newStaff.SalesWork = sSalesWork; if (sSalesWork != 0) { newStaff.WorkInSales = true; WorkInSales = true; } newStaff.OperationWork = sOperationWork; if (sOperationWork != 0) { newStaff.WorkInOps = true; WorkInOps = true; } CC.NewCalcStaffWageByDep(sAdminWork, sDevWork, sSalesWork, sOperationWork,wT,sWage); newStaff.YearlyWork = 0; // 后续需要补充逻辑 newStaff.AdminWage = CC.NewAdminStaffWage; newStaff.DevWage = CC.NewDevStaffWage; newStaff.SalesWage = CC.NewSalesStaffWage; newStaff.OpsWage = CC.NewOpStaffWage; IT_ServiceController.Instance.Context.StaffRepository.Add(newStaff); IT_ServiceController.Instance.Save(); DC.AddToStaffDepartment(staffSocialSecNumber, WorkInAdmin, WorkInDev, WorkInSales, WorkInOps); } catch(Exception ex) { // 异常处理逻辑(原代码未完整展示) } }
2. 关联Staff与Department的方法
public void AddToStaffDepartment(string staffSocialSec, bool wA, bool wD, bool wS, bool wO) { IEnumerable<Staff> staffs = IT_ServiceController.Instance.Context.StaffRepository.GetAll(); Staff newStaffToDep = staffs.Where(i => i.StaffSocialSecNumber.Equals(staffSocialSec)).FirstOrDefault(); StaffDepartment staffToD = new StaffDepartment(); staffToD.StaffId = newStaffToDep.StaffId; if (wA = true) { staffToD.DepartmentId = 3; } else if (wD = true) { staffToD.DepartmentId = 1; } else if (wS = true) { staffToD.DepartmentId = 4; } else if (wO = true) { staffToD.DepartmentId = 2; } IT_ServiceController.Instance.Context.StaffDepartmentRepository.Add(staffToD); IT_ServiceController.Instance.Save(); }
3. 实体模型与EF配置
StaffDepartment实体类
public class StaffDepartment { public int StaffId { get; set; } public Staff Staff { get; set; } public int DepartmentId { get; set; } public Department Department { get; set; } }
ModelBuilder配置
modelBuilder.Entity<StaffDepartment>().HasKey(sd => new { sd.StaffId, sd.DepartmentId}); modelBuilder.Entity<StaffDepartment>().HasOne<Staff>(sd => sd.Staff).WithMany(b => b.StaffDepartments).HasForeignKey(sd => sd.StaffId); modelBuilder.Entity<StaffDepartment>().HasOne<Department>(sd => sd.Department).WithMany(b => b.StaffDepartments).HasForeignKey(sd => sd.DepartmentId);
数据库结果情况
我附上了数据库的截图,重点看StaffId为1002和1003的记录:
- 1002是成功关联单个DepartmentId的情况
- 1003是我尝试关联多个DepartmentId的结果,但最终只生成了一条记录
[数据库结果截图:展示单StaffId关联单个/多个DepartmentId的尝试结果]
想请教大家,我哪里的逻辑出错了?应该怎么修改才能实现一个StaffId同时关联多个DepartmentId?
备注:内容来源于stack exchange,提问作者Rasmus O
相关产品推荐
相关产品推荐

