我有一个简单的EF Linq查询。现在它每次都返回null,我无法找到原因。
public Sample GetDataSample(Equipment equip)
{
Sample sample = null;
try
{
sample = this.Samples.FirstOrDefault(s => s.EquipmentId == equip.Id);
}
catch (Exception e)
{
// do nothing for now
}
return sample;
}
这是在具有有效DbContext
实体的有效Equipment
内调用的。这是我在调试器中看到的。我已验证活动上下文中的DbSet
Samples
是否包含应匹配的数据。请告诉我,我错过了一些明显的东西。
编辑:我做了一个LINQ配置文件,看看SQL生成的是什么,它看起来很好:
SELECT TOP (1)
[Extent1].[Id] AS [Id],
[Extent1].[EquipmentId] AS [EquipmentId],
[Extent1].[SampleTime] AS [SampleTime]
FROM [Pbhs].[Samples] AS [Extent1]
WHERE [Extent1].[EquipmentId] = 1
现在,我想知道EF查找是在检查本地代理还是在查找数据库。数据存在于当前上下文中,但尚未提交到数据库。
答案 0 :(得分:1)
这里有两件事:
s.EquipmentId == equip.Id
设备ID如何," EquipmentId"与主键ID相同?你确定你没有比较" apples"到"橘子"?
数据存在于当前上下文中,但尚未提交到数据库。
然后在Id
上搜索将失败,因为新项目尚未提交到数据库并已分配Id
。