簡體   English   中英

Entity Framework Core,只返回與 Automapper 相關的 id?

[英]Entity Framework Core, return just related id with Automapper?

我正在使用 .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 Call /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中未填充PhaseCategoryId

我猜您的映射配置中有類似以下行的內容-

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

對?

由於您的Phase模型中沒有名為PhaseCategoryId的屬性,因此您強制自己加載PhaseCategory屬性來進行映射,並且 -

Include(pc => pc.PhaseCategory)

您的查詢的一部分導致內部聯接。

添加外鍵屬性 -

public int PhaseCategoryId { get; set; }

在您的Phase模型中並將映射配置定義為簡單的 -

CreateMap<Phase, PhaseReadDTO>();

然后,您可以在沒有Include部分的情況下進行查詢,並且響應中仍然包含PhaseCategoryId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM