Asp.net 错误或特性:返回具有相同主键值的多行的存储过程
在使用LINQtoSQL开发应用程序期间,我发现当存储过程返回具有相同主键的多个不同行时,LINQ将使完整的列表对象相同。例如,如果我有下表Asp.net 错误或特性:返回具有相同主键值的多行的存储过程,asp.net,sql-server,entity-framework,linq-to-sql,stored-procedures,Asp.net,Sql Server,Entity Framework,Linq To Sql,Stored Procedures,在使用LINQtoSQL开发应用程序期间,我发现当存储过程返回具有相同主键的多个不同行时,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
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
这不是一个bug,而是一个特性。实体框架和Linq to Sql都要求唯一标识的实体和具有每个唯一键的实体只能加载一次,因此当您返回表示具有相同键的相同实体类型的多个记录时,只有第一个记录被物化为实体,并且该实体用于表示具有相同键的所有其他记录(因此,它不仅会返回相同的数据,还会返回对实体的相同引用)。它被称为身份映射,是ORM工具的关键功能。你的问题是什么?我问的是这是Linq功能还是我做错了什么?我想说这是存储过程中的一个错误。为什么要返回重复的主键?我在重用一个类,该类包含除主键外的相同表字段y、 这就是为什么,我在我的SP中硬编码主键。我将为此创建一个新类,但我只需要确认这是一个功能还是一个bug。显示存储过程的代码。我几乎不相信MS可以发布这样的bug