我正在开发一个结构化为3层应用程序的Web API项目,该应用程序使用Entity Framework进行数据访问:
我使用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();
}
所有工作到现在为止。假设Roles
和Users
具有多对多关系。我必须插入新角色并附加一些现有用户。因此,我将RoleDTO
传递给DAL,并将其映射到Role
集合Users
。当我调用SaveChanges()
时,我得到了PK违规,因为Entity Framework正在尝试插入相关用户,但它们已经存在。
我该如何解决?