EF和Automapper没有超过一个月的经验,我真的很想完成以下工作:
我有3个数据库实体如下:(为简单起见,删除了不必要的字段)
在我的项目中,我通过EF引入了这些实体,并创建了2个DTO类,如下所示:
[DataContract]
public class StoreDTO
{
[DataMember]
public int StoreID {get; set;}
[DataMember]
public string StoreName{get; set;}
[DataMember]
public List<CategoryDTO> Categories {get; set;}
}
[DataContract]
public class CategoryDTO
{
[DataMember]
public int CategoryID {get; set;}
[DataMember]
public string CategoryName{get; set;}
[DataMember]
public List<StoreDTO> Stores{get; set;}
}
我正在使用automapper来尝试映射这两个类,但我真的很想让复合关系继续下去。
我的地图创建现在看起来像这样(经过多次尝试):
Mapper.CreateMap<Store, StoreDTO>(); // Not performing the category list mapping yet here
// This is where I attemped the mapping for a store list in each category:
// x.Store_StoreCategory = StoreCategory as composite entity above
Mapper.CreateMap<Category, CategoryDTO>()
.ForMember(dto => dto.Stores,
opt => opt.MapFrom(x => Mapper.Map<List<Store>, List<StoreDTO>>(x.Store_StoreCategory.Select(y => y.Store).ToList())));
这不行。我读了几篇文章,我遇到的最新文章是吉米·博加德本人的文章: Avoid many-to-many mappings in ORMs
他建议创建复合DTO并从那里开始工作,这似乎是一个很好的方法,但我需要帮助映射,因为我是一个TSQL人,还不是具有automapper和DTO功能的LINQ人。 。
我试过的其他文章如下,但由于我对Automapper和EF缺乏了解,我担心我可能会忽略这一点,因为这些文章没有提到Jimmy Bogard所建议的复合DTO:
AutoMapper many to many relationship into collection
https://github.com/AutoMapper/AutoMapper/wiki/Custom-value-resolvers
Many-to-many to DTOs using Automapper
真的很感激一些见解!