структура сущности, возвращающая только одно значение, но размер списка правильный - PullRequest
4 голосов
/ 18 марта 2011

Платформа сущностей, возвращающая только одно значение, но размер списка правильный

У меня есть таблица, у которой нет первичного идентификатора, и мне нужно получить или выбрать все значения в ней.

То, что я вижу, когда я делаю выбор с помощью linq, количество объектов корректно, но это первая и та же строка снова и снова.

Я просто делаю что-то вроде этого

List<MyValueType> valuesInDB = myDb.MyValueTypes.ToList();

ПроблемаЯ могу получить тысячи строк (что правильно), но все строки имеют одинаковые точные данные.

Я использую VS 2010 и использовал мастер для создания моего объекта EF.

Ответы [ 2 ]

5 голосов
/ 18 марта 2011

Проблема в том, что структура сущностей не может работать с сущностью без ключа.Поэтому, если в вашей таблице не указан ключ, структура сущности будет выводить свою собственную.Ключ, созданный EF, состоит из всех недвоичных недвоичных столбцов.

Таким образом, если у вас, например, в вашей сущности есть один столбец, не имеющий значения NULL и имеющий очень маленький набор значений (например, enum), вы сможете загружать только одну сущность «на значение».Причина - внутренняя реализация контекста и менеджера состояний, который использует шаблон карты идентичности.Когда запись данных извлекается из базы данных, EF сначала проверяет ключ объекта и пытается найти объект с тем же ключом во внутренней памяти.Если объект найден, он будет использовать этот объект вместо извлеченной записи данных (несмотря на разные данные).Если объект с ключом не найден, новый объект материализуется и добавляется во внутреннее хранилище.

Для этого используется карта идентичности - объект с данным ключом должен создаваться только один раз каждым контекстом.Карта идентичности является основным шаблоном в ORM.

Я писал о карте идентичности также в этот вопрос .

0 голосов
/ 18 марта 2011

Я бы предложил поискать слово «Предупреждение» в файле EDM designer.cs. Он может сказать вам, если у Entity Framework возникли проблемы с вашей таблицей.

Я действительно не могу много комментировать из-за отсутствия дизайна стола. Я пытался воспроизвести вашу проблему, но не смог этого сделать. Вот что я сделал:

  1. Создана таблица без первичного ключа, но у нее есть уникальный ключ в столбце идентификатора. Entity Framework смог вывести первичный ключ, и когда я получил данные, я не только получил правильное количество строк, но и исправил данные в этих строках.
  2. Создана таблица без первичного ключа и без уникального ключа. Также не было столбца с именем ID. Entity Framework исключил эту таблицу в сгенерированном EDM. Следовательно, я не смог запросить эту таблицу вообще. Это отображалось как предупреждение в файле конструктора EDM.

Было бы лучше, если бы вы могли поделиться сценарием создания для своей таблицы.

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