假设我有一个公司,其中包含员工列表:
public class Company
{
public List<Employee> Employees { get; set; }
}
public class Employee
{
public string Name { get; set; }
public Company CompanyOfWork { get; set; }
}
我的公司已经存在于数据库中,但我需要保存一些新员工。
目前我会遍历员工列表,寻找需要保存到数据库的新员工(在我的例子中,ID = 0),然后添加它们:
foreach(var employee in company.Employees)
{
if(employee.ID == 0)
db.Employees.Add(employee);
}
这会在数据库中创建新员工,但也会在数据库中创建公司的重复记录(大概是因为 EF 在员工上查看 CompanyOfWork,并假设它需要添加到数据库中?)
防止它创建重复项的正确方法是什么?
我是否需要先检查公司是否已经存在,如果存在,则附加它?我的建议中没有一个感觉很干净。
将员工添加到现有公司,然后保存公司,而不是直接将其添加到 DbSet:
var existingCompany = db.Companies.Find(companyId);
foreach (var employee in employeesToAdd) {
if (! existingCompany.Employees.Contains(employee)) {
existingCompany.Employees.Add(employee);
}
else {
// update existing employee ...
}
}
db.SaveChanges();
EF ChangeTracker 将知道它也必须更新公司和员工之间的引用,如果关系为可持久实体正确建模。此代码还假定启用了员工的延迟加载。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句