Reputation: 21
Here is my settings, after them goes error and description.
Interfaces:
public interface IUser
{
int Id { get; set; }
string Firstname { get; set; }
string Lastname { get; set; }
string Email { get; set; }
string Fullname { get; }
}
public interface IPost
{
int Id { get; set; }
String Description { get; set; }
DateTime CreatedDate { get; set; }
int? UserId { get; set; }
IUser User { get; set; }
ICollection<IComment> Comments { get; set; }
}
public interface IComment
{
int Id { get; set; }
string Description { get; set; }
DateTime CreatedDate { get; set; }
int? PostId { get; set; }
int? UserId { get; set; }
IUser User { get; set; }
}
AutoMapper config:
Mapper.Initialize(cfg => cfg.CreateMap<IUser, DAL.User>());
Mapper.Initialize(cfg => cfg.CreateMap<IComment, DAL.Comment>());
Mapper.Initialize(cfg => cfg.CreateMap<IPost, DAL.Post>()
.ForMember(d => d.User, m => m.MapFrom(s => s.User))
.ForMember(d => d.UserId, m => m.MapFrom(s => s.User.Id))
.ForMember(d => d.Comments, m => m.MapFrom(s => s.Comments))
);
Mapper.AssertConfigurationIsValid();
EF code:
public IEnumerable<IPost> GetPosts()
{
IQueryable<DAL.Post> query = dbSet.Posts.Include("Comments");
var result = Mapper.Map<IEnumerable<IPost>>(query);
return result;
}
Error:
{"The following property on HiThere.DAL.User cannot be mapped: \n\tUser \nAdd a custom mapping expression, ignore, add a custom resolver, or modify the destination type HiThere.DAL.User.\nContext:\n\tMapping to property User from HiThere.Model.Common.IUser to HiThere.DAL.User\nException of type 'AutoMapper.AutoMapperConfigurationException' was thrown."}
Description:
I'm using AutoMapper inside ASP.NET WebAPI2 project to map data between DAL and Models. For some reason I cannot make proper mapping when using nested objects. Any help will be appreciated.
Upvotes: 1
Views: 683
Reputation: 21
Actually I fix it by adding all cfg.CreateMap to single Mapper.Inizialize. My mistake. Hopefully someone will find this usefull.
Mapper.Initialize(cfg =>
{
cfg.CreateMap<DAL.Post, IPost>()
.ForMember(d => d.User, m => m.MapFrom(s => s.User))
.ForMember(d => d.UserId, m => m.MapFrom(s => s.User.Id))
.ForMember(d => d.Comments, m => m.MapFrom(s => s.Comments))
;
cfg.CreateMap<IUser, DAL.User>().ReverseMap();
cfg.CreateMap<IComment, DAL.Comment>().ReverseMap();
}
);
Mapper.AssertConfigurationIsValid();
Upvotes: 1