在使用LINQ to SQL开发应用程序期间,我发现当存储过程返回具有相同主键的多个不同行时,LINQ将使完整列表对象相同。例如,如果我有下表,
ID Name Salary
-- ---- -----
1 A 20
2 B 200
3 C 30
4 D 520
并且我的存储过程返回除了具有相同主键的所有行
ID Name Salary
-- ---- -----
1 A 20
1 B 200
1 C 30
1 D 520
然后linq将这些行绑定为,
ID Name Salary
-- ---- -----
1 A 20
1 A 20
1 A 20
1 A 20
答案 0 :(得分:3)
这不是一个特色错误。实体框架和Linq-to-Sql都需要唯一标识的实体和实体,每个唯一的密钥只能加载一次,因此当您返回多个表示相同实体类型且具有相同密钥的记录时,只有第一条记录被实现为实体,并且该实体用于使用相同密钥表示所有其他记录(因此它不仅会返回相同的数据,而且会返回与实体相同的引用)。它被称为身份地图,它是ORM工具的关键特征。