Click here to Skip to main content
15,880,427 members
Please Sign up or sign in to vote.
5.00/5 (1 vote)
Hi All,

I would like to use something like AutoMapper for the following code instead of manual mapping.

I have two tables User and Role and both mapped with RoleID. now problem is if i am getting records from Users then it will gives me only RoleID instead of RoleName. So i tried to get result with custom class and mapped each entities with for loop (Manually).

Can anybody help to optimize this manual code to automatic?
because i have more then 15 tables with relations.

Code Snippet:
C#
// M O D E L
public class RoleModel : IRoleModel
{
    public Guid RoleID { get; set; }
    public string RoleName { get; set; }
    public string Description { get; set; }
}
public class UserModel : IUserModel
{
    public Guid UserID { get; set; }
    public Guid RoleID { get; set; }
    public string UserName { get; set; }
}
public class UserRoleModel
{
    public Guid UserID { get; set; }
    public string UserName { get; set; }
    public string Description { get; set; }
    public Guid RoleID { get; set; }
    public string RoleName { get; set; }
}
// C O N T R O L L E R
public class UsersController : Controller
{
    private IUserService _UserService;
    public UsersController()
        : this(new UserService())
    {
    }
    public UsersController(IUserService UserService)
    {
        _UserService = UserService;
    }
    public ActionResult Index()
    {
        IList<UserRoleModel> users = _UserService.GetUsersWithRole();
        return View(users);
    }
    public ActionResult Create()
    {
        return View();
    }
}
// S E R V I C E
public class UserService : ServiceBase<IUserService, User>, IUserService
{
    private IUserRepository _UserRepository;
    public UserService()
        : this(new UserRepository())
    {
    }
    public UserService(IUserRepository UserRepository)
    {
        _UserRepository = UserRepository ?? new UserRepository();
    }
    public IList<UserRoleModel> GetUsersWithRole()
    {
        IList<User> users = _UserRepository.GetAll();
        IList<UserRoleModel> userswithrol = new List<UserRoleModel>();
        /* ---------------------------------------------
        I would like to use AUTO MAPPER instead of MANUAL MAPPING
        ------------------------------------------------  */
        foreach (User u in users)
        {
            UserRoleModel ur = new UserRoleModel();
            ur.UserID = u.UserID;
            ur.UserName = u.UserName;
            ur.Description = u.Description;
            ur.RoleID = u.RoleID.Value;
            ur.RoleName = u.Role.RoleName;
            userswithrol.Add(ur);
        }
        /*--------------------------------------------*/
        return userswithrol;
    }
    private IList<UserModel> GetAll()
    {
        IEnumerable<User> alliance;
        if (whereCondition != null)
            alliance = _UserRepository.GetAll(whereCondition);
        else
            alliance = _UserRepository.GetAll();
        UserListModel model = new UserListModel();
        model.UserList = new List<UserModel>();
        AutoMapper.Mapper.CreateMap<User, UserModel>().ForMember(dest => dest.UserID, opt => opt.MapFrom(src => src.UserID));
        model.UserList = AutoMapper.Mapper.Map(alliance, model.UserList);
        return model.UserList;
    }
}


Any answer would be appreciated!
Thanks,
Imdadhusen
Posted
Updated 4-Oct-11 4:01am
v5

1 solution

I have SOLVED this question using following solution:

C#
public IList<UserRoleModel> GetUsersWithRole()
        {
            IList<User> users = _UserRepository.GetAll();
            IList<UserRoleModel> userswithrol = new List<UserRoleModel>();
            AutoMapper.Mapper.CreateMap<User, UserRoleModel>()
                .ForMember(d => d.UserID, o => o.MapFrom(s => s.UserID))
                .ForMember(d => d.RoleName, o => o.MapFrom(s => s.Role.RoleName));
            userswithrol = AutoMapper.Mapper.Map(users, userswithrol);
            return userswithrol;
        }


Note:
i have just added single line of code to achieve desired output
C#
.ForMember(d => d.RoleName, o => o.MapFrom(s => s.Role.RoleName))


Thanks,
Imdadhusen
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900