EF6 - 添加属于已经持久化实体的新实体

FBryant87

假设我有一个公司,其中包含员工列表:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WebApi的EF6合并实体

来自分类Dev

EF6实体的通用克隆

来自分类Dev

在 EF6 中加载相关实体

来自分类Dev

无法添加实体数据模型(EF6)

来自分类Dev

EF6 Model First:添加新实体后无法从模型生成数据库

来自分类Dev

获取POCO实体的EF6代理

来自分类Dev

删除与EF6有多对多关系的实体记录

来自分类Dev

删除实体导致验证错误EF6

来自分类Dev

实体类型没有定义键EF6

来自分类Dev

EF6包括实体中集合的引用

来自分类Dev

EF6渴望加载相关实体的单个属性

来自分类Dev

无法使用EF6和MYSQL生成实体

来自分类Dev

删除与EF6有多对多关系的实体记录

来自分类Dev

使用Linq返回EF6中的相关实体

来自分类Dev

在EF6中更新实体会产生主键异常

来自分类Dev

获取POCO实体的EF6代理

来自分类Dev

阻止在EF6中为特定实体生成表

来自分类Dev

更新 EF6 中的实体子集合

来自分类Dev

如何使用扩展实体在EF6类中通过属性更改通知创建新属性?

来自分类Dev

向EF6生成的实体类添加属性

来自分类Dev

向EF6生成的实体类添加属性

来自分类Dev

实体框架急于在EF4和EF6中加载差异

来自分类Dev

在EF6中添加多对多视图

来自分类Dev

添加复杂项目时违反EF6主键

来自分类Dev

EF6 延迟加载:添加时加载整个集合?

来自分类Dev

将数据库优先EF6实体映射到域模型实体

来自分类Dev

VS2010,EF6和SQLite EF6提供程序的“ Ado.Net实体数据模型”模板?

来自分类Dev

实体框架集成测试无法运行单独通过的多个测试[Resharper,NUnit,EF6]

来自分类Dev

实体类型MVC5 EF6中的用户