具有复杂 EF 实体的 AutoMapper
AutoMapper with a complex EF Entity
我有一个基本的 table 和一些 FK 参考。因此,当我为更新操作检索实体时;该实体包含 ICollections
个相关实体。我还有一个主 ViewModel,其中每个实体都是一个子 ViewModel。我的目标是像这样使用 Automapper:
mapper.Map(MainViewmodel obj,MainEntity obj);
为此,我有一个 MappingConfiguration,例如:
CreateMap<MainViewModel, MainEntity>();
CreateMap<subViewModel1, subEntity1>();
CreateMap<subViewModel2, subEntity2>();
这给了我一个未映射的属性异常,因为 ICollections
没有被映射。谁能指导我处理这种情况的最佳方法?
谢谢。
如果我没理解错的话,你 class 是这样的:
class MainViewModel
{
ICollection<SubViewModel1> SubViewModels { get;set; }
}
class SubViewModel1
{
}
和
class MainEntity
{
ICollection<SubEntity1> SubEntities { get;set; }
}
class SubEntity1
{
}
然后您应该为每个 class 创建规则,并自动收集此类 classes automaper 地图。
CreateMap<MainViewModel, MainEntity>();
CreateMap<SubViewModel1, SubEntity1>();
增补 1:
- 试试这个方法:
var mappedMainEntity = rmapper.Map<MainEntity>(MainViewmodel obj);
如果将 MainEntity
映射到 MainViewModel
,则需要将 .ReverseMap() 添加到映射规则中,如下所示:
CreateMap().ReverseMap();
CreateMap().ReverseMap();
加法2:
- AutoMapper 映射public 仅限属性
- 如果映射属性有不同的名称,您需要使用明确指示如何映射这些属性。使用
ForMember
方法和 MapFrom
选项。 Example
我有一个基本的 table 和一些 FK 参考。因此,当我为更新操作检索实体时;该实体包含 ICollections
个相关实体。我还有一个主 ViewModel,其中每个实体都是一个子 ViewModel。我的目标是像这样使用 Automapper:
mapper.Map(MainViewmodel obj,MainEntity obj);
为此,我有一个 MappingConfiguration,例如:
CreateMap<MainViewModel, MainEntity>();
CreateMap<subViewModel1, subEntity1>();
CreateMap<subViewModel2, subEntity2>();
这给了我一个未映射的属性异常,因为 ICollections
没有被映射。谁能指导我处理这种情况的最佳方法?
谢谢。
如果我没理解错的话,你 class 是这样的:
class MainViewModel
{
ICollection<SubViewModel1> SubViewModels { get;set; }
}
class SubViewModel1
{
}
和
class MainEntity
{
ICollection<SubEntity1> SubEntities { get;set; }
}
class SubEntity1
{
}
然后您应该为每个 class 创建规则,并自动收集此类 classes automaper 地图。
CreateMap<MainViewModel, MainEntity>();
CreateMap<SubViewModel1, SubEntity1>();
增补 1:
- 试试这个方法:
var mappedMainEntity = rmapper.Map<MainEntity>(MainViewmodel obj);
如果将
MainEntity
映射到MainViewModel
,则需要将 .ReverseMap() 添加到映射规则中,如下所示:CreateMap().ReverseMap(); CreateMap().ReverseMap();
加法2:
- AutoMapper 映射public 仅限属性
- 如果映射属性有不同的名称,您需要使用明确指示如何映射这些属性。使用
ForMember
方法和MapFrom
选项。 Example