Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用AutoMapper 7/C将父模型映射到子模型#_C#_Entity Framework_Asp.net Core_Automapper_Asp.net Core Webapi - Fatal编程技术网

C# 使用AutoMapper 7/C将父模型映射到子模型#

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

我在.NETCore3项目中使用C#和Automapper7,有一个父级>子级模型和DTO的层次结构。我无法将父模型映射到最低的子DTO

涉及的模型如下所示:

父模型#1:

父模型#3是主元素模型,它包括一个CreatedBy,属于上述ParentUserModel类型:

要映射的DTO为:

大多数父DTO:

CreatedBy ParentUserModel的DTO缺少其他数据,这些数据将是敏感信息,我无法包括:

我的问题是,当我希望ParentModelForReturnDto的MainElementForParentModelDto的CreatedBy具有CreatedBy ParentUserModel的Id和用户名时,它返回空值

以下是我的相关映射,它们没有完全映射它:

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);