Ошибка или функция: хранимая процедура, которая возвращает несколько строк с одинаковым значением первичного ключа - PullRequest
1 голос
/ 26 декабря 2011

Во время разработки приложения с 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 Ответ

3 голосов
/ 26 декабря 2011

Это не ошибка, это особенность.И структура сущности, и Linq-to-Sql требуют однозначно идентифицированной сущности, и сущность с каждым уникальным ключом может быть загружена только один раз, поэтому при возврате нескольких записей, представляющих один и тот же тип сущности с одинаковым ключом, только первая запись материализуется в сущность, и эта сущность используется дляпредставление всех других записей с тем же ключом (поэтому он не только вернет те же данные, но и одну и ту же ссылку на объект).Она называется картой идентификации и является ключевой особенностью инструментов ORM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...