Entity Framework: таблица без первичного ключа - PullRequest
154 голосов
/ 22 октября 2010

У меня есть существующая БД, с которой я хотел бы создать новое приложение, используя EF4.0

В некоторых таблицах не определены первичные ключи, поэтому при создании новой модели данных сущностей я получаю следующее сообщение: «В таблице / представлении TABLE_NAME не определен первичный ключ и не может быть выведен действительный первичный ключ. Эта таблица / представление было исключено. Чтобы использовать сущность, вам необходимо просмотреть схему, добавить правильные ключи и раскомментировать ее ".

Если я хочу использовать их и изменять данные, я должен обязательно добавить PK к этим таблицам или есть обходной путь, чтобы мне не пришлось это делать?

Ответы [ 16 ]

1 голос
/ 09 июля 2017

Это может быть поздно, чтобы ответить ... однако ...

Если таблица не имеет первичного ключа, то есть несколько сценариев, которые необходимо проанализировать, чтобы заставить EF работать должным образом,Правило: EF будет работать с таблицами / классами с первичным ключом.Вот как работает отслеживание ...

Скажем, ваша таблица 1. Записи уникальны: уникальность создается одним столбцом внешнего ключа: 2. Записи уникальны: уникальность создается комбинациейнесколько столбцов.3. Записи не являются уникальными (по большей части *).

Для сценариев # 1 и # 2 можно добавить следующую строку в метод OnModelCreating модуля DbContext: modelBuilder.Entity (). HasKey (x =>new {x.column_a, x.column_b});// столько столбцов, сколько требуется, чтобы сделать записи уникальными.

Для сценария # 3 вы все равно можете использовать вышеуказанное решение (# 1 + # 2) после изучения таблицы (* что делает все записи уникальнымитем не мение).Если вам необходимо включить ВСЕ столбцы, чтобы сделать все записи уникальными, вы можете добавить в таблицу столбец первичного ключа.Если эта таблица принадлежит стороннему поставщику, то клонируйте эту таблицу в вашу локальную базу данных (в одночасье или столько времени, сколько вам нужно) с произвольным добавлением столбца первичного ключа в сценарии клонирования.

1 голос
/ 29 апреля 2012
  1. Измените структуру таблицы и добавьте основной столбец.Обновите модель
  2. Измените файл .EDMX в редакторе XML и попробуйте добавить новый столбец под тегом для этой конкретной таблицы (НЕ РАБОТАЕТ)
  3. Вместо создания нового первичного столбца в выходной таблицеЯ сделаю составной ключ, задействовав все существующие столбцы ( WORKED )

Entity Framework: Добавление DataTable без первичного ключа к модели Entity.

0 голосов
/ 24 декабря 2018

Я очень рад, что моя проблема решена.

Невозможно обновить EntitySet - потому что он имеет DefiningQuery и элемент не существует

и сделайте это: Посмотрите под этой строкой и найдите тег. В нем будет большой старый выбор. Удалите тег и его содержимое ..

теперь без изменения БД T я могу вставить в таблицу, которая не имеет PK

спасибо всем и благодарю Pharylon

0 голосов
/ 21 января 2014

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

Так что, процитировав ответ, данный Пратапом Редди, он отлично сработал для нас.

0 голосов
/ 06 декабря 2013

С практической точки зрения каждая таблица - даже денормализованная таблица, такая как таблица хранилища - должна иметь первичный ключ. Или, в противном случае, он должен по крайней мере иметь уникальный ненулевой индекс.

Без какого-либо уникального ключа в таблице могут (и будут) появляться дублированные записи, что очень проблематично как для уровней ORM, так и для базового понимания данных. Таблица с дублирующимися записями, вероятно, является признаком плохого дизайна.

По крайней мере, в таблице должен быть хотя бы столбец идентификаторов. Добавление столбца автоматического создания идентификатора занимает около 2 минут в SQL Server и 5 минут в Oracle. Для этого дополнительного усилия, многие, многие проблемы будут исключены.

0 голосов
/ 13 июня 2012

В таблице должен быть только один столбец, который не допускает пустых значений

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