无法使用 VS 代码检索 WebAPI、DTO、AutoMapper 和 .NET Core 中的 EF 外键值

Can't retrieve EF Foreign Key values in WebAPI, DTO, AutoMapper and .NET Core using VS Code

我在尝试从 .NET Core C# RESTAPI 应用程序检索外键值时遇到问题。我正在使用代码优先。它一直困扰着我,我看不出问题出在哪里。 我有一个简单的 table,里面有一个 FK 给用户 table。

public class TripRouteDaySum
    {
        public int Id { get; set; }
        public int YearNum {get; set;}
        public int MonthNum {get; set;}
        public int DayNum {get; set;}
        public int HourNum { get; set;}
        [Column(TypeName="decimal(12,2)")]
        public Nullable<decimal> DistanceSum { get; set; }
        [Column(TypeName="decimal(12,2)")]
        public Nullable<decimal> CarbonSum { get; set; }

        public User User {get; set;}
        public Mode Mode {get; set;}
    }

使用 Code First 迁移生成:

SQL Datatable

所以为了检索它,我使用 AutoMapper 设置了一个 DTO(正常设置为 CreateMap)

public class TripRouteDaySumDto
{        
    public int UserId {get; set;}
    public int ModeId {get; set;}
    public int YearNum {get; set;}
    public int MonthNum {get; set;}
    public int DayNum {get; set;}
    public int HourNum {get; set;}
    public decimal DistanceSum { get; set;}
    public decimal CarbonSum { get; set;}
}

然后我运行针对这个的查询:

public IEnumerable<TripRouteDaySum> GetTripRouteDaySum(int userId, int yearNum, int monthNum, int dayNum, bool trackChanges) =>
            FindByCondition(c=> c.User.Id.Equals(userId) 
            && c.YearNum.Equals(yearNum)
            && c.MonthNum.Equals(monthNum) 
            && c.DayNum.Equals(dayNum), trackChanges)
            .ToList();

并且在服务器上的 Info 运行ning 期间,我可以看到查询正在恢复所有相关数据。

Debug Info Trace

但是当我在 JSON 中回复时,我得到了 userId 和 modeId = 0 显然它们实际上是 none 零。

JSON output

需要美化贴图吗?我的查询可以改进吗?我的 DTO 定义有误吗?

如果我是你,我会把下面的内容添加到 TripRouteDaySum

public int UserId { get; set; }

public int ModeId { get; set; }

届时 AutoMapper 将能够映射它们,因为它们在您的实体和 DTO 中具有相同的名称。

这也会使您的过滤更容易一些,因为您可以替换

FindByCondition(c=> c.User.Id.Equals(userId)

FindByCondition(c=> c.UserId.Equals(userId)