【发布时间】:2019-03-12 19:50:45
【问题描述】:
我的 API 中有一个端点,它返回所选项目的所有数据。该项目是一个名为Survey 的根对象,它有一个页面列表。
public partial class Surveys
{
public Surveys()
{
Pages = new HashSet<Pages>();
}
public string Description { get; set; }
public string Name { get; set; }
public long Syear { get; set; }
public long Quarter { get; set; }
public ICollection<Pages> Pages { get; set; }
}
Pages 的模型类如下所示。
public partial class Pages
{
public Pages()
{
Elements = new HashSet<Elements>();
}
public string Id { get; set; }
public long Number { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public int? PageFlowId { get; set; }
public bool NamedPage { get; set; }
public bool? IsFirst { get; set; }
public bool? IsLast { get; set; }
public long? SurveyQuarter { get; set; }
public long? SurveySyear { get; set; }
public PagesFlows PageFlow { get; set; }
public Surveys Survey { get; set; }
public ICollection<Elements> Elements { get; set; }
}
但是当我发送 GET 请求时返回一个空列表 Pages
[
{
"description": "Customer Satisfaction Survey",
"name": "Customer Survey",
"syear": 2019,
"quarter": 1,
"pages": []
}
]
数据库包含数据。表的主键是复合键(Syear、Quarter)。我的 API 如下所示。
public async Task<IActionResult> GetSurveys([FromRoute]long syear, long quarter)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var surveys = await _context.Surveys.Include(s => s.Pages).SingleOrDefaultAsync(s => s.Syear == syear && s.Quarter == quarter);
if (surveys == null)
{
return NotFound();
}
return Ok(surveys);
}
一个星期以来,我一直在努力解决这个问题。任何帮助将不胜感激,在此先感谢您。
【问题讨论】:
-
您是否尝试过其他方法?比如获取调查,然后根据所选调查的 id 选择页面?在您的 EF 中,我没有看到您如何将这两个实体相互关联。
-
问题是我的参数没有被解析到 GetSurveys 方法。我通过 [public ICollection
Pages { get; 关联两个实体。放; }] 上的调查模型和 [公共调查调查 { get;放; }] 在 Pages 模型中。这还不够吗? -
如果
Pages为空,则没有与您指定的syear和quarter匹配的调查相关页面。就那么简单。检查你的数据库,那里的数据不是你想象的那样。 -
@Chris 我检查了数据库,在那里我可以看到数据存在。实际上我是通过这个 API 使用 POST 方法添加这些数据的,数据检索似乎是个问题。
-
不要试图变得困难,但这并不完全是火箭科学,而且你几乎不可能在 EF Core 中偶然发现一个错误,就像一个带有连接的选择一样基本和简单,特别是因为数以百万计的开发人员在生产中使用它而没有问题。要么它没有使用你认为它正在使用的数据库,要么你认为正确的数据实际上不是,但这是你的数据问题。
标签: c# .net-core entity-framework-core asp.net-core-webapi