Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 错误或特性:返回具有相同主键值的多行的存储过程_Asp.net_Sql Server_Entity Framework_Linq To Sql_Stored Procedures - Fatal编程技术网

Asp.net 错误或特性:返回具有相同主键值的多行的存储过程

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

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