使用Entity Framework和AutoMapper更新(添加,删除,更新)嵌套集合

时间:2019-07-15 19:02:32

标签: c# entity-framework automapper

我正在尝试在RestAPI上使用Entity Framework和AutoMapper更新嵌套集合。

假设我有一个简单的数据库模型和DTO,如下所示:

// Database Models
public class Branch
{
    public int Id { get; set; }
    public string Location { get; set; }

    public virtual ICollection<Employee> Employees { get; set; }
}

public class Employee
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public int BranchId { get; set; }

    public virtual Branch Branch { get; set; }
}

// DTOs
public class BranchDTO
{
    public int Id { get; set; }
    public string Location { get; set; }
    public virtual ICollection<EmployeeDTO> Employees { get; set; }
}

public class EmployeeDTO
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string LastName { get; set; }
    public int BranchId { get; set; }
}

我在这里的目标是接受带有分支机构信息和该分支机构的雇员集合的PUT请求(创建和更新)。是否可以将AutoMapper设置为:

  • 添加之前未与该分支机构关联的员工
  • 更新以前与该分支机构关联但其信息已更改的员工
  • 删除不再与该分支关联的员工(即,不包含在JSON有效负载中的员工)

我要避免的是使Controller混乱不堪,但是我不确定这是否可以通过AutoMapper完成。

最让我感到困惑的是如何获得与每个员工相关联的BranchId

我尝试如下进行映射,不用说,它没有用。它确实创建了新员工,但不会更新/删除它们。此外,每个PUT请求都会在表中添加一个新的Employee:

CreateMap<BranchDto, Branch>()
    .ForMember(dest => dest.Employee, opt => opt.MapFrom(src => src.Employee))

任何提示或建议,我们将不胜感激!

0 个答案:

没有答案