首页 > 解决方案 > 为什么在查询 2 个不同的表时从 EF 核心得到相同的结果?

问题描述

我是 Blazor/ASP.net core/EF 的新手,正在尝试使用 Linq 显示一些结果。我遇到了结果重复出现的问题。

我首先使用 context1 执行带有 2 个参数的存储过程 GetJobNumbers。一个序列号和一个 ID 号。这样做的结果是 2 行。每行都包含一个名为 table_name 的列。我使用该 table_name 作为 context2 中的变量作为调用正确 JobNumber 的参数。这是我在 context2 的 Context.cs 文件中的内容:

'''
public DBContext(string table_name)
{
JobNumberTableName = table_name;
}

'''

这是代码部分中的逻辑,当单击表单上的按钮时,我使用它来获取信息并将其添加到列表中。lstImbTable 是接口代码中用来显示结果的。

'''
public List<Models.TableResults> lstResults;

public void RecordLookupProd()
{
    lstTableResults = new List<Models.TableResults>();
    using (var context1 = new Models.JobTrackingContext())
    {
        var RangeTrackingJobNumber = context1.RangeTracking.FromSqlRaw("EXECUTE GetJobNumbers {0}, {1}", SeqNo, ID).AsNoTracking().ToList();

        if (RangeTrackingJobNumber.Count > 0)
        {
            foreach (var JobNum in RangeTrackingJobNumber)
            {
                using (var context2 = new Models.DBContext(JobNum.table_name))
                {
                    var JobNumberData = (from s in context2.TableResults where s.barcode == barcode select s).AsNoTracking().ToList();
                    lstImbTable.AddRange(JobNumberData);
                };
            }
        }
    };
'''

问题是 JobNumberData 在两次迭代中都收到相同的结果,即使当我单步执行代码时,我可以看到每个 context2 迭代都使用了正确的表名。我已经尝试过 AsNoTracking(),结果是一样的。我也使用“使用”对象应该在下一次迭代中处理,因此数据不应该被缓存。有人可以让我了解我可能做错了什么吗?在过去的 4 个小时里,我一直在拉我的头发,试图找出我做错了什么。

我希望我能很好地解释这一点,否则我可以尝试收集一些屏幕截图。

标签: c#entity-framework-core

解决方案


推荐阅读