C# 使用AutoMapper 7/C将父模型映射到子模型#
我在.NETCore3项目中使用C#和Automapper7,有一个父级>子级模型和DTO的层次结构。我无法将父模型映射到最低的子DTO 涉及的模型如下所示: 父模型#1: 父模型#3是主元素模型,它包括一个CreatedBy,属于上述ParentUserModel类型: 要映射的DTO为: 大多数父DTO: CreatedBy ParentUserModel的DTO缺少其他数据,这些数据将是敏感信息,我无法包括: 我的问题是,当我希望ParentModelForReturnDto的MainElementForParentModelDto的CreatedBy具有CreatedBy ParentUserModel的Id和用户名时,它返回空值 以下是我的相关映射,它们没有完全映射它:C# 使用AutoMapper 7/C将父模型映射到子模型#,c#,entity-framework,asp.net-core,automapper,asp.net-core-webapi,C#,Entity Framework,Asp.net Core,Automapper,Asp.net Core Webapi,我在.NETCore3项目中使用C#和Automapper7,有一个父级>子级模型和DTO的层次结构。我无法将父模型映射到最低的子DTO 涉及的模型如下所示: 父模型#1: 父模型#3是主元素模型,它包括一个CreatedBy,属于上述ParentUserModel类型: 要映射的DTO为: 大多数父DTO: CreatedBy ParentUserModel的DTO缺少其他数据,这些数据将是敏感信息,我无法包括: 我的问题是,当我希望ParentModelForReturnDto的MainEl
CreateMap<ParentModel, ParentModelForReturnDto>();
CreateMap<MainElement, MainElementForParentModelDto>();
CreateMap<ParentUserModel, UserCreatorForMainElementDto >();
CreateMap();
CreateMap();
CreateMap();
有人能帮我弄清楚如何映射这些,以便CreatedBy返回usercreatorformainerementdto类型而不是null吗?
我认为错误在从MainElement到MainElement for ParentModeldTo的映射中,但我不确定。我想弄明白这件事已经有一段时间了
任何我能澄清的问题。尽量去掉不必要的东西,同时保留足够的东西。谢谢所有能帮忙的人
编辑:
以上映射使用的是Profile
以下是我在控制器中映射的内容:
var parentModelFromRepo = _context.GetParent(name)
var parentToReturn = _mapper.Map<ParentModelForReturnDto>(parentModelFromRepo);
var parentModelFromRepo=\u context.GetParent(name)
var parentoreturn=\u mapper.Map(parentModelFromRepo);
您确定parentModelFromRepo
中填充了所需的所有相关数据吗?@IvanStoev是,如果我将ICollection替换为ICollection,则会返回有关用户的所有信息,包括我不需要的所有其他数据。@IvanStoev这就是我的推论,即我无法使用MainElementForParentModelDto,因为如果我让有关MainElement的所有信息返回,包括未使用该DTO的完整用户然后返回所有内容,但所有内容都过于敏感。@IvanStoev为了完全回答您的问题,如果我没有弄错的话,parentModelFromRepo必须在其中包含该数据。我这样问是因为有实体框架
标记,因此,拥有null
目标数据的一个可能原因是拥有null
源数据(这在EF中并不少见,尤其是EF核心)。映射太简单,无法怀疑AutoMapper。您能否提供不涉及EF的复制代码,例如var parentModelFromRepo=newparentmodel{/*sample data*/}代码>已填充main元素
s和CreatedBy
并在映射后消失?是否确实已使用所需的所有相关数据填充parentModelFromRepo
,如果我将ICollection替换为ICollection,则会返回有关用户的所有信息,包括我不需要的所有其他数据。@IvanStoev这就是我的推论,即我无法使用MainElementForParentModelDto,因为如果我让有关MainElement的所有信息返回,包括未使用该DTO的完整用户然后返回所有内容,但所有内容都过于敏感。@IvanStoev为了完全回答您的问题,如果我没有弄错的话,parentModelFromRepo必须在其中包含该数据。我这样问是因为有实体框架
标记,因此,拥有null
目标数据的一个可能原因是拥有null
源数据(这在EF中并不少见,尤其是EF核心)。映射太简单,无法怀疑AutoMapper。您能否提供不涉及EF的复制代码,例如var parentModelFromRepo=newparentmodel{/*sample data*/}代码>是否已填充main元素
s并在映射后消失?
public class MainElement
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public ParentUserModel CreatedBy { get; set; }
public int CreatedById { get; set; }
public string OtherData { get; set; }
}
public class ParentModelForReturnDto
{
public int Id { get; set; }
public string Title { get; set; }
public ICollection<MainElementForParentModelDto> MainElements { get; set; }
}
public class MainElementForParentModelDto
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public UserCreatorForMainElementDto CreatedBy { get; set; }
}
public class UserCreatorForMainElementDto
{
public int Id { get; set; }
public string UserName { get; set; }
}
CreateMap<ParentModel, ParentModelForReturnDto>();
CreateMap<MainElement, MainElementForParentModelDto>();
CreateMap<ParentUserModel, UserCreatorForMainElementDto >();
var parentModelFromRepo = _context.GetParent(name)
var parentToReturn = _mapper.Map<ParentModelForReturnDto>(parentModelFromRepo);