我发现 LINQ to Entities 需要表上的主键才能返回正确的结果。没有它,我会得到预期的行数,但包括重复的行(因此,错过的行)。此问题在此处和 此处进行了描述,我认为这是一个错误。
在我的一个表中,每一行都是唯一的,但我无法在所有字段中创建复合键,因为可空列不能在主键中使用(同样,我认为这是 SQL Server 的限制)。
那么...当使用 LINQ to Entities 从该表中进行选择时,如何获得正确的结果?我相信“关键”可能是在 Visual Studio 模型设计器的所有列中创建一个“实体密钥”,但我不确定如何执行此操作。在可为空的列上设置 Entity Key = true 会引发异常。
在一个阶段,我放弃并添加了一个启用自动增量的标识 int 列并将其用作 PK,这解决了问题,但由于一直在删除/插入大量数据(它是不可能简单地按计划重置自动增量计数器,因为并非所有行都被删除,从而导致冲突)。
我最后的手段是添加一个 bigint 标识列作为 PK,摆脱自动增量种子值重置器,并希望它在应用程序的生命周期内持续“足够长”,但我对此并不满意。(编辑:好的......它会持续足够长的时间。我主要关心的是性能)