自动映射 - 将实体框架中的多对多查找映射到viewmodel

时间:2011-05-03 08:22:26

标签: asp.net-mvc entity-framework automapper

我相信这是一个AutoMapper基础问题:

我有一个“文章”实体框架实体,我将其映射到视图模型以传递给视图进行编辑。这很好用:

Mapper.CreateMap<Article, ArticleAdmin>();
var articleData = Mapper.Map<Article, ArticleAdmin>(articleEntity);

现在,我的EF模型通过TopicArticles查找表包含与Topics表的多对多关系,我想在编辑文章数据时管理关联。

所以我将它添加到我的viewmodel:

public ICollection<TopicArticle> TopicArticles { get; set; } 

我认为这是镜像实体类型的正确规范 - 我的EF模型将TopicArticles关联成员作为EntityCollection。

我添加了第二个viewmodel类来填充列表:

public class TopicArticle
{
    public int ArticleId { get; set; }
    public int TopicId { get; set; }
    public bool IsPrimaryTopic { get; set; }
}

当我运行映射时,我得到“缺少类型映射配置或不支持的映射”。这是可以理解的,因为我没有告诉Automapper关于我的TopicArticle viewmodel类。

所以: 问题:

如何将映射更改为此额外图层的帐户?

(我真的不了解应该如何映射它的Automapper语法。)

另外:我错过了什么吗?

注意/更新:

我发布的代码中有一些错误,出现的任何“出版物”都是错误的,应该是“文章” - 这是因为我简化了一些情况:文章实际上来自出版物,但我我不希望这个问题的复杂性。

1 个答案:

答案 0 :(得分:2)

好的,这真的是基本的。我的问题是没有进入实际的Automapper文档。谷歌搜索“automapper文档”将此链接作为最高响应:

http://automapper.codeplex.com/documentation

这是一个无用的TOC。

可以从主页访问真实文档。

我的问题的答案很简单: 首先,为了清楚起见,我更改了第二个viewmodel类的名称:

public class TopicArticleAdmin

然后回到我的行动中,我再添加一个映射行:

Mapper.CreateMap<Publication, ArticleAdmin>();
Mapper.CreateMap<TopicPublication, TopicPublicationAdmin>();
var articles = Mapper.Map<IEnumerable<Publication>, IEnumerable<ArticleAdmin>>(
    articleEntities
);