具有复杂EF实体的AutoMapper

时间:2017-12-21 12:34:05

标签: c# entity-framework model-view-controller automapper-6

我有一个带有几个FK引用的基本表。所以当我检索实体进行更新操作时;该实体包含ICollections相关的entites。我还有一个主ViewModel,其中每个实体都是一个子viewModel。我的目标是使用Automapper,如:

mapper.Map(MainViewmodel obj,MainEntity obj); 

为此我有一个MappingConfiguration,如:

 CreateMap<MainViewModel, MainEntity>();
 CreateMap<subViewModel1, subEntity1>();
 CreateMap<subViewModel2, subEntity2>();

这给了我一个Unmapped属性异常,因为ICollections没有被映射。有谁能指导我处理这种情况的最佳方法?

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你就会有这样的课程:

class MainViewModel
{
    ICollection<SubViewModel1> SubViewModels { get;set; }
}

class SubViewModel1
{
}

class MainEntity
{
    ICollection<SubEntity1> SubEntities { get;set; }
}

class SubEntity1
{    
}

然后你应该为每个类创建规则,这些类的集合会自动地自动映射。

CreateMap<MainViewModel, MainEntity>();
CreateMap<SubViewModel1, SubEntity1>();

添加1:

  1. 尝试此方法:var mappedMainEntity = rmapper.Map<MainEntity>(MainViewmodel obj);
  2. 如果您将MainEntity映射到MainViewModel,则需要添加.ReverseMap()来映射规则,如下所示:

    CreateMap()ReverseMap(); CreateMap()ReverseMap();

  3. 添加2:

    1. AutoMapper仅映射公共属性
    2. 如果映射属性具有不同的名称,则需要明确指示如何映射这些属性。使用ForMember方法和MapFrom选项。 Example