【问题标题】:LINQ not returning any results although they exist in databaseLINQ 不返回任何结果,尽管它们存在于数据库中
【发布时间】:2018-07-01 17:44:05
【问题描述】:

我有以下两个类(为清楚起见进行了简化):

public class Report
{
    public int Id { get; set; }
    public string Discriminator { get; set; }
    public int FileId { get; set; }
    public string AuthorId { get; set; }
    public string ReportPhase { get; set; }
}

public class DailyObservationReport : Report
{
    public int DayOfTraining { get; set; }
    public DateTime DateOfTraining { get; set; }
    public DateTime StartTime { get; set; }
    public DateTime EndTime { get; set; }
}

我已将它们添加到 ApplicationDbContext 中,如下所示: 公共 DbSet 报告 { 获取;放; }

公开

public DbSet<Amber.Models.ReportingModels.DailyObservationReport>DailyObservationReport { get; set; }
public DbSet<Amber.Models.ReportingModels.Rating> Rating { get; set; }

我已经使用视图在我的表中成功创建了大约 10 个测试报告,因此我知道应该在 LINQ 查询中返回一些记录。我的理解是,因为我有鉴别器列,所以这个 LINQ 查询应该返回上下文中的所有 DailyObservationReports

var test2 = from r in _context.DailyObservationReport
                        select r;

但是,它没有,这个也没有

var test = from r in _context.Report
                       where r.Discriminator.Equals("DailyObservationReport")
                       select r;

有人知道为什么我无法访问数据库中的记录吗?

【问题讨论】:

  • 你确定你使用了正确的连接字符串吗?
  • @DavidG 我在这个项目中只有一个连接字符串,我可以使用这个控制器将记录插入数据库,所以我不认为这是一个连接字符串问题
  • 你有多确定?如果您没有遇到异常,那么这应该可以正常工作,这会使连接字符串成为最有可能的嫌疑人。
  • @DavidG 99% 确定。我只有一个连接字符串。它在 appsettings.json 文件中列为 DefaultConnection。所以除非我无意中覆盖了那个连接字符串(不知道我会怎么做),我很确定这不是问题。
  • 没问题 :) 我已经尝试了您的更新模型(EFC 2.0.1),它按预期工作。 _context.DailyObservationReport.ToList()_context.Report.OfType&lt;DailyObservationReport&gt;().ToList() 都执行类似 select ... from Report where Discriminator = 'DailyObservationReport' 的操作。

标签: c# asp.net-mvc asp.net-core-mvc entity-framework-core


【解决方案1】:

您似乎仍在测试,并且可能只是在调试器中验证您的查询。如果是这种情况,那么它可能只是由于 IQueryable 的延迟执行导致看起来没有结果。试试这个,看看test2test 是否仍然为空。

var test2 = (from r in _context.DailyObservationReport
                        select r).ToArray();

var test = (from r in _context.Report
                       where r.Discriminator.Equals("DailyObservationReport")
                       select r).ToArray();

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多