这让我困扰了一阵子,我终于想得到答案了。

假设我有员工和部门。两者之间存在多对多关系,关联表名为EmployeeDepartments。

Employees
-------------------
EmployeeID (PK)

Departments
-------------------
DepartmentID (PK)

EmployeeDepartments
-------------------
EmployeeID (FK)
DepartmentID (FK)


我有一个页面,用户可以在其中编辑员工。有一个复选框列表,显示所有部门,并将检查该员工所属的部门。然后,用户可以检查/取消选中员工所属的部门。

当我编辑员工并保存数据时,应该如何处理这些部门?

我这样做的方法是删除该员工的EmployeeDepartments表中的每条记录。然后针对用户选择的每个部门,将其添加到EmployeeDepartments中。

它可以工作,但是必须有一种更有效的方法来完成,这似乎是错误的。如果某个员工在5个部门中,而我要将该员工添加到另一个部门中,则必须从EmployeeDepartments中删除5个记录,然后添加6个记录。

最佳答案

只需处理更改增量。也就是说,先查看当前“选定”的项目,然后再选择要选择的项目,然后添加或删除适当的项目。可以使用设置操作(在LINQ中很简单)来计算。


删除old - new中的项目(设置差异或Except
new - old中添加项目(设置差异或Except
new ^ old中的项目应不受影响)


如果需要,许多工作可以移交给数据库。 (例如,删除where ...,如果不存在则插入...。另请参见Standard SQL MERGE语句以及非Standard等效项和扩展名)。

确保正确使用数据库事务以确保一致性。

快乐的编码。

08-19 03:48