【问题标题】:Entity Framework Core returns null always except when using OrderBy?Entity Framework Core 总是返回 null,除非使用 OrderBy?
【发布时间】:2019-05-22 19:14:29
【问题描述】:

我一直在使用 graphql.net 服务器、asp.net 核心、ef 核心和北风 mssql 数据库进行一些测试。尽管我在从数据库中获取数据时遇到了问题,但是 EF Core 没有返回它应该返回的数据。

模型类示例:

public partial class Categories
{        
    public int CategoryId { get; set; }
    public string CategoryName { get; set; }
    public string Description { get; set; }
    public byte[] Picture { get; set; }
    public ICollection<Products> Products { get; set; }
} 

很简单,顺便说一句,我一直在使用 db first 方法,这实际上是使用 ef core 的脚手架工具生成的。

我想要做的是,当我在 graphql 中查询一个不带参数的类别时,它会返回表中的第一项(如果我想查询任何其他项目,我会使用其他方法执行此操作,这是有效的)。

在我的 graphql 解析器中,当我查询一个字段时,在本例中为 Category(此时我不想要类别列表),我通常会使用以下代码轻松完成:

public async Task<Categories> GetOne(int CategoryID)
{
    Categories category =
    await _dbContext.Categories.FirstOrDefaultAsync(
    c => c.CategoryId.Equals(CategoryID));
    return category;
}

上面的代码给我返回了一个null,但真正奇怪的是下面的代码也返回了null:

Categories categories = await _dbContext.Categories
                                        .Where(c => c.CategoryId.Equals(CategoryID))
                                        .FirstOrDefaultAsync();

它工作的唯一场景,但不是预期的那样,因为它实际上将第二个 ID 从表中返回给我,而我最后添加的任何内容都是 FirstAsync、SingleAsync,甚至是 LastOrDefaultAsync结果总是表中的第二行,使用代码sn -p:

Categories categories = await _dbContext.Categories
                                        .OrderBy(c => c.CategoryId.Equals(CategoryID))
                                        .FirstOrDefaultAsync();`

我对 Entity 框架还很陌生,因此欢迎提供任何帮助和建议。

【问题讨论】:

  • 真的有一个具有给定 ID 的类别吗?使用 OrderBy 情况,您实际上是按布尔值排序,然后获得第一个,如果类别中有一行,它自然不会返回 null。
  • @CetinBasoz 是的,事实上它是最小的 8 行表。
  • Categories categories = await _dbContext.Categories.FindAsync(CategoryID); 是否也返回 null?

标签: c# sql-server graphql


【解决方案1】:

所以 EF Core 的行为没问题,但是 graphql 解析器没有正确设置。在重新访问我的 graphql 解析器后,实际的方法完成了他们必须做的事情。

我非常感谢所有提供的输入,并且可以将其标记为已解决。

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 2021-06-18
    • 1970-01-01
    • 2017-03-19
    • 2018-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多