如何将实体从DAL映射到BL

时间:2019-04-03 22:03:47

标签: entity-framework mapping code-first data-access-layer

我需要有关映射实体的帮助。我要连接DAL和BL。我不知道如何映射集合。

DAL中的实体团队:

    namespace ICSapp.DAL.Entities
    {
            public class Team : ICSappEntityBase
            {


                    public string TeamName { get; set; }


                    public virtual ICollection<UserTeam> Members { get; set; }


                    public virtual ICollection<Post> Posts { get; set; }

        }

同一个类在我的BLL模型中。

这是BLL映射器的代码:

    namespace ICSapp.BL.Mapper
    {
           public static TeamModel MapTeamEntityToDTeamModel(Team entity)
            {
                    return new TeamModel
                    {
                            Id = entity.Id,
                            TeamName = entity.TeamName,
                            // Members = entity.Members ??
                           // Posts = entity.Posts ??
                    };
            }

         public static Team MapTeamModelToTeamEntity(TeamModel model)
         {
                    return new IngredientEntity
                    {
                            Id = model.Id,
                            TeamName = model.TeamName,
                            //Members = model.Members ??
                           // Posts = model Posts ??
                    };
            }

        }

那么如何映射集合? 谢谢

PS:我需要手动操作。

1 个答案:

答案 0 :(得分:0)

public static TeamModel MapTeamEntityToDTeamModel(Team entity)
{
    return new TeamModel
    {
        Id = entity.Id,
        TeamName = entity.TeamName,
        Members = entity.Members.Select(x => MapTeamUserEntityToTeamUserModel(x)).ToList()
     };
}
public static TeamUserModel MapTeamUserEntityToTeamUserModel(TeamUser entity)
{
    return new TeamUserModel
    {
        Id = entity.Id,
        UserName = entity.UserName,
        // etc. etc.
     };
}

重复帖子。

不过,确实要投资使用Automapper。它可以自动完成所有操作,并且可以使用IQueryable直接与EF基于ProjectTo<T>的功能集成,以便可以在EF查询中直接投影ViewModel。手动方法效率不高,容易产生懒惰负载,并重新发明了本来就很圆的车轮。