记一次EFCore6查询返回结果完全相同的问题排查

本文讲述了作者在使用EFCore 6时遇到的诡异问题,封装代码查询结果数量正确但记录内容相同。作者通过排查SQL、视图问题,最终发现是视图中ID字段被EFCore默认为主键导致。还验证了EFCore可能是将同一对象塞进列表以提高性能和内存利用率。

最近玩EFCore 6,发生了一个诡异的问题。封装好的代码,在一个简单的Where后发现取回来的结果数量确是对的,但列表里的每一个记录内容都一样。

sql如下:

select * from project_cost 
where year_month>=202201 and year_month<=202201 and project_id=1

这个是再简单不过的sql了,我到数据库里查一下,没问题。是返回了62条记录并且每条记录里的信息都不一样。

但在.NET Core里,我发现确实是返回了62条数据,但每条数据的内容都完全一模一样!于是开始我的各种神奇debug之旅。

1. 排查SQL问题

刚开始就怀疑是不是sql有问题。于是找网上的教程开打印sql的debug方式,结果没有一个好用的。后来发现了一个方式,可以在代码里debug出来要执行的sql。

代码如下:

/// <summary>
/// Gets objects from database by filter.
/// </summary>
/// <param name="predicate">Specified a filter</param>
/// <returns></returns>
public virtual async Task<IQueryable<TEntity>> WhereAsync(Expression<Func<TEntity, bool>> predicate)
{
    return await Task.Run(() =>
    {
        var result = _dbSet.Where<TEntity>(predicate).AsQueryable<TEntity>();
        var sql = result.To
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值