实体框架核心,是否只返回与Automapper相关的ID?

联邦

我正在使用.netCore 3.1,EF Core和Automapper开发REST Api。

我有以下实体:

public class Phase
{
    public int Id { get; set; }

    [Required]
    [MaxLength(50)]
    public String Name { get; set; }

    [MaxLength(800)]
    public String Description { get; set; }

    [Required]
    public PhaseCategory PhaseCategory { get; set; }
}

public class PhaseCategory
{
  public int Id { get; set; }

  [MaxLength(50)]
  public String Name { get; set; }
}

我为Rest Api调用/ api / Phases创建了以下DTO

public class PhaseReadDTO
{
    public int Id { get; set; }

    public String Name { get; set; }

    public String Description { get; set; }

    public int PhaseCategoryId { get; set; }
}

我的问题是,为了使PhaseCategoryId可用,我需要通过以下方式进行查询:

var phase = _dbContext.Phases.Include(pc => pc.PhaseCategory).ToList();
return Ok(_mapper.Map<IEnumerable<PhaseReadDTO>>(phase));

这意味着EF在幕后进行了不需要的INNER JOIN

SELECT [p].[Id], [p].[Description], [p].[Name], [p].[PhaseCategoryId], [p0].[Id], [p0].[Name]  
    FROM [Phases] AS [p]  
    INNER JOIN [PhaseCategories] AS [p0] ON [p].[PhaseCategoryId] = [p0].[Id]

但是当我这样做

var phase = _dbContext.Phases.ToList();
return Ok(_mapper.Map<IEnumerable<PhaseReadDTO>>(phase));

查询是我所期望的

SELECT [p].[Id], [p].[Description], [p].[Name], [p].[PhaseCategoryId]  
            FROM [Phases] AS [p]

PhaseCategoryId响应中未填充。

阿提亚尔

我想您的映射配置中有类似以下内容的内容-

.ForMember(d => d.PhaseCategoryId, opt => MapFrom(s => s.PhaseCategory.Id))

对?

由于您PhaseCategoryIdPhase模型中没有调用任何属性,因此您将强迫自己加载该PhaseCategory属性,以使映射发生,并且-

Include(pc => pc.PhaseCategory)

查询的一部分导致内部联接。

添加外键属性-

public int PhaseCategoryId { get; set; }

Phase模型中,并简单地定义映射配置-

CreateMap<Phase, PhaseReadDTO>();

然后,您可以查询不包含Include零件的零件,并且仍然PhaseCategoryId在响应中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在实体框架核心中仅包含相关实体的ID

来自分类Dev

仅与实体框架核心图相关的实体不为null

来自分类Dev

实体框架核心GroupBy-聚合相关实体上的功能

来自分类Dev

实体框架核心-是否需要检查查询是否可以返回结果

来自分类Dev

实体框架核心-是否需要检查查询是否可以返回结果

来自分类Dev

实体框架核心能否返回视图模型

来自分类Dev

实体框架是否自动保存相关类?

来自分类Dev

强类型的ID在实体框架的核心

来自分类Dev

实体框架核心:查询对象后加载相关数据

来自分类Dev

实体框架核心未从参考表加载相关数据

来自分类Dev

使用实体框架返回所有相关实体

来自分类Dev

实体框架核心(7):按ID加载单个实体

来自分类Dev

实体框架核心ForEachAsync

来自分类Dev

实体框架核心收益

来自分类Dev

实体框架核心:如何在其空列属性中包括与空相关的实体?

来自分类Dev

实体框架核心:如何在其空列属性中包括与空相关的实体?

来自分类Dev

实体框架核心-如何检查数据库是否存在?

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架加载相关实体

来自分类Dev

实体框架核心使用预先存在的ID密钥

来自分类Dev

如何使用相关数据为实体框架核心数据播种

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

Automapper延迟加载。实体框架

来自分类Dev

实体框架核心.include()问题

来自分类Dev

实体框架核心的反向引擎

来自分类Dev

实体框架核心级联删除

来自分类Dev

实体框架(核心)-级联删除

来自分类Dev

实体框架的核心所在

来自分类Dev

实体框架核心.include()问题

Related 相关文章

热门标签

归档