错误或功能:存储过程返回具有相同主键值的多个行

时间:2011-12-26 07:03:35

标签: asp.net sql-server entity-framework linq-to-sql stored-procedures

在使用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

1 个答案:

答案 0 :(得分:3)

这不是一个特色错误。实体框架和Linq-to-Sql都需要唯一标识的实体和实体,每个唯一的密钥只能加载一次,因此当您返回多个表示相同实体类型且具有相同密钥的记录时,只有第一条记录被实现为实体,并且该实体用于使用相同密钥表示所有其他记录(因此它不仅会返回相同的数据,而且会返回与实体相同的引用)。它被称为身份地图,它是ORM工具的关键特征。

相关问题