这让我困扰了一阵子,我终于想得到答案了。
假设我有员工和部门。两者之间存在多对多关系,关联表名为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等效项和扩展名)。
确保正确使用数据库事务以确保一致性。
快乐的编码。