无法使用 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)
我在尝试从 .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)