【发布时间】: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