首页 > 解决方案 > API 返回空白数组 (ASP.NET CORE)

问题描述

我有两个模型类,experience并且proposals.

这是体验代码

public class Experience : BaseEntity
{
        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
        public virtual DateTime? CreationDate { get; set; }
        public virtual string City { get; set; }
        public virtual double Price { get; set; }

        public virtual double? Lat { get; set; }
        public virtual double? Lng { get; set; }
        public virtual bool IsActive { get; set; }
        public virtual bool IsFinished { get; set; }
        public virtual bool IsConfirmed { get; set; }
        public virtual int CountryId { get; set; }
        [ForeignKey("CountryId")]
        public virtual Country Country { get; set; }
        public virtual string UserId { get; set; }
        [ForeignKey("UserId")]
        public virtual AppUser IdentityUser { get; set; }

        public virtual ICollection<Proposals.Proposals> Proposals { get; set; }
        public virtual ICollection<Comments.Comments> Comments { get; set; }
}

和提案

public class Proposals : BaseEntity
{
    public virtual string Description { get; set; }
    public virtual double Price { get; set; }
    public virtual bool IsActive { get; set; }
    public virtual bool IsConfirmed { get; set; }
    [ForeignKey("ExperienceId")]
    public virtual Experience Experience { get; set; }
    public virtual int ExperienceId { get; set; }
    public virtual string UserId { get; set; }
    [ForeignKey("UserId")]
    public virtual AppUser IdentityUser { get; set; }
}

经验与用户模型有关

我需要获得所有与体验相关的、有用户的提案。

我写了这个方法

  public async Task<List<ProposalsDto>> GetUserProposalCustomer(string id)
    {
        var proposals = await _context.Experiences.Where(x => x.UserId == id).Select(x => x.Proposals)
            .ProjectTo<ProposalsDto>().ToListAsync();
        return proposals;
    }

但它返回给我这个

[
{
    "description": null,
    "proposalPrice": 0.0,
    "experiencePrice": 0.0,
    "creator": null,
    "proposalMessage": null,
    "email": null,
    "experienceId": 0,
    "isActive": false,
    "userId": null,
    "isConfirmed": false,
    "id": 0
},
{
    "description": null,
    "proposalPrice": 0.0,
    "experiencePrice": 0.0,
    "creator": null,
    "proposalMessage": null,
    "email": null,
    "experienceId": 0,
    "isActive": false,
    "userId": null,
    "isConfirmed": false,
    "id": 0
},

我希望拥有这些价值观

在此处输入图像描述

我的麻烦在哪里?

更新

我尝试添加.Include 并尝试编写 SQL 脚本

就这个

 SELECT a.id
FROM dbo.Proposals AS a
INNER JOIN dbo.Experiences AS b ON a.ExperienceId=b.Id WHERE a.UserId = '3f4853a0-e310-44c2-a9e5-0c8d1dd7231e';

我拥有所有的价值观。但是在 API 上,我有和以前一样的东西。

在此处输入图像描述

标签: c#asp.netasp.net-mvcasp.net-core

解决方案


您是否在 EF 配置中启用了延迟加载?

尝试使用Include预加载提案。

var proposals = await _context
                        .Experiences
                        .Include(x => x.Proposals)
                        .Where(x => x.UserId == id)
                        .Select(x => x.Proposals).ToListAsync();

推荐阅读