[英]EF core + Automapper ID-only related entity collection, how?
[英]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.