You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法为单个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 16:03:13