实体框架和AutoMapper - 如何插入或更新关系?

时间:2017-04-19 15:27:12

标签: c# entity-framework automapper entity-relationship

我正在开发一个结构化为3层应用程序的Web API项目,该应用程序使用Entity Framework进行数据访问:

  • UI消耗的控制器
  • 业务逻辑(BLL),业务运营(作为日志和其他)
  • 存储库(DAL),唯一访问实体框架上下文的

我使用AutoMapper将实体映射到DTO,反之亦然。

以下是一些代码:

DTO

public class RoleDTO
{
    public int RoleId { get; set; }
    public string RoleName { get; set; }

    public IEnumerable<UserDTO> Users { get; set; }
}

public class UserDTO
{
    public int UserId { get; set; }
    public string UserName { get; set; }

    public IEnumerable<RoleDTO> Roles { get; set; }
}

DAL

public IEnumerable<RoleDTO> GetRoles()
{
    var entities = Context.Roles.AsEnumerable();

    return DTOMapper<IEnumerable<RoleDTO>>(entities);
}

BLL

public IEnumerable<RoleDTO> GetRoles()
{
    return Repository.GetRoles();
}

所有工作到现在为止。假设RolesUsers具有多对多关系。我必须插入角色并附加一些现有用户。因此,我将RoleDTO传递给DAL,并将其映射到Role集合Users。当我调用SaveChanges()时,我得到了PK违规,因为Entity Framework正在尝试插入相关用户,但它们已经存在。

我该如何解决?

0 个答案:

没有答案