【发布时间】:2017-04-26 18:36:37
【问题描述】:
这是我的设置,之后出现错误和描述。
接口:
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 配置:
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 代码:
public IEnumerable<IPost> GetPosts()
{
IQueryable<DAL.Post> query = dbSet.Posts.Include("Comments");
var result = Mapper.Map<IEnumerable<IPost>>(query);
return result;
}
错误:
{"HiThere.DAL.User 上的以下属性无法映射:\n\tUser\n添加自定义映射表达式,忽略,添加自定义解析器,或修改目标类型 HiThere.DAL.User。\n上下文: \n\t从 HiThere.Model.Common.IUser 映射到属性 User 到 HiThere.DAL.User\n引发了 'AutoMapper.AutoMapperConfigurationException' 类型的异常。"}
说明:
我在 ASP.NET WebAPI2 项目中使用 AutoMapper 在 DAL 和模型之间映射数据。由于某种原因,我在使用嵌套对象时无法进行正确的映射。 任何帮助将不胜感激。
【问题讨论】:
-
不应该所有
cfg.CreateMap都在一个Mapper.Initialize中吗?也没有从DAL类到接口的映射。此外,如果DAL类实际上实现了这些接口,为什么还需要 AutoMapper? -
tkanks 移动 cfg.CreateMap o 单个 Mapper.Initializer 修复问题!!!
标签: c# entity-framework asp.net-web-api2 automapper dto