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