ADO.NET Entity Framework: мастер обновления не будет добавлять таблицы

93

Я добавил в свой проект новую модель сущностных данных ADO.Net и использовал мастер обновлений для добавления таблиц в модель. Пять из выбранных таблиц были добавлены в область конструктора. Две другие таблицы не добавлю. Я выбираю их в мастере и нажимаю «Готово», но они никогда не отображаются в области конструктора.

Это ошибка или бывают ситуации, когда таблица не может быть добавлена ​​в модель (по замыслу)?


ОБНОВЛЕНИЕ: XML (* .edmx) обнаруживает проблему.

<!--Errors Found During Generation:
warning 6013: The table/view 'FooBar.dbo.Roles' does not 
have a primary key defined and no valid primary key could be inferred. 
This table/view has been excluded. To use the entity you will need to 
review your schema, add the correct keys and uncomment it.-->
<!--<EntityType Name="Roles">
    <Property Name="role_id" Type="decimal" />
    <Property Name="role_desc" Type="nvarchar" MaxLength="30" />
</EntityType>-->
Роберт Клейпул
источник
8
Это должно иметь НАМНОГО больше голосов. Я понятия не имел, что Visual Studio не может добавить таблицу, поскольку файл .edmx - единственное место, где действительно возникает ошибка. Надеюсь, в версии 2 появится диалоговое окно!
Джон Бубриски
+1 - В моем случае сообщения об ошибке не было.
teynon
Как вы заметили, таблицы, которые не будут импортированы, не имеют первичных ключей. Добавьте ПК, и все готово.
Эрик

Ответы:

46

Область разработки отличается от модели объекта. В вашем EDMX может быть таблица в сопоставлении, которая не отображается на поверхности конструктора. Просмотрите файл как XML, чтобы убедиться, что это так. В этом случае мастер обновления не позволит вам повторно добавить таблицы, поскольку они уже являются частью модели сущности. Итак, вообще говоря, Мастер обновления знает о вашей модели сущности больше, чем о поверхности дизайна как таковой .

Я не думаю, что это именно та ситуация, в которой вы находитесь, но это должно дать вам общее представление о решении: зайдите в XML и найдите ссылки на рассматриваемые таблицы.

Крэйг Стунц
источник
4
У меня только что возникла эта проблема, я удалил таблицу из модели, и когда я пошел, чтобы добавить ее снова, визуальный дизайнер не показывал, что она находится в базе данных. Чтобы обойти это, я удалил текст из файла .edmx, но сумел испортить XML. Если вы это сделаете, пожалуйста, сначала сделайте резервную копию файла, на всякий случай. К счастью, я смог найти испорченный тег с помощью git diff.
GrandMasterFlush
42

Установите первичные ключи для всех таблиц или только один снятый флажок «Разрешить ноль» для любого столбца каждой таблицы. Меня устраивает :)

Парвиндер
источник
2
Я считаю, что это правильный ответ, по крайней мере, для меня. Благодарность!
Эрик
@Parvinder, я боролся с этой проблемой в большей части моего проекта. В конце концов, Ваш ответ прояснил для меня все. В моем случае в таблице «При объединении» я не указал поле «Не нулевой ключ» или просто первичный ключ. После исправления этого у меня было спокойствие. Большое спасибо
PatsonLeaner
Что я понял с разрешением, так это то, что мы не можем добавить таблицу в модель сущности, если i) эта таблица не имеет первичного ключа или (ii) в этой таблице нет столбца Allow Null.
Муртуза Хан
10

1. Измените структуру таблицы и добавьте основной столбец. Обновите модель.

2. Измените файл .EDMX в редакторе XML и попробуйте добавить новый столбец в тег для этой конкретной таблицы. (НЕ БУДЕТ РАБОТАТЬ)

3. Вместо создания нового основного столбца для выхода из таблицы я создам составной ключ, включив все существующие столбцы (РАБОТАЕТ)

Entity Framework: добавление DataTable без первичного ключа в модель сущности.

Пратап
источник
Я столкнулся с этой же проблемой. Модель сущности добавляла таблицу, однако она не отображалась в дизайнере. Я также не мог получить к нему доступ в коде. Я добавил поле ID Ключ ... сработало!
Рави Рам,
6

У меня тоже была эта проблема, все вышеперечисленное у меня не сработало. Мне помогло следующее.

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

Если вы пытаетесь подключиться к пользователю, убедитесь, что у него включены правильные учетные данные, в этом случае включены параметры чтения и записи.

Для этого запустите MS SQL Server Managment Studio, подключенную к вашему SQL-серверу, и выберите базу данных, с которой вы пытаетесь установить соединение в Visual Studio. В разделе your_dbname -> Security -> Users вы найдете список пользователей. Щелкните правой кнопкой мыши имя пользователя, под которым вы пытаетесь войти, и выберите свойства. Откроется окно. Выберите страницу «Общие» (выбрана по умолчанию) и на вкладке «Членство в роли базы данных» убедитесь, что выбраны «db_datareader» и «db_datawrite».

Примечание. Когда вы также входите в MS SQL Server Managment Studio, убедитесь, что вы входите в систему с пользователем, который может включать / отключать эти параметры ...

Кип Эй
источник
5

Проверьте наличие «Nulls» в вашей конкретной таблице. Если для всех столбцов установлено значение «Разрешить нулевое значение», Entity Framework рассматривает его как «пустую» таблицу. У меня была та же проблема, и я снял флажок «Разрешить нулевое значение», и он добавил требуемую таблицу.

Кетан Дубей
источник
1
Работает, тупо ни ошибок, ни предупреждений в логах не появляется!
RolandoCC 02
3

Таблицы без первичных ключей добавляться не будут.

user8155123
источник
1

Мое решение - удалить всю модель и прочитать ее, включая новые таблицы, которые мне нужны.

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

У меня тоже были некоторые проблемы с этим ( модель данных сущности Ado.Net не обновляется правильно )

Сообщество
источник
1

Это было решено в последней версии (среда: VS 2012, .NET framework 4.5). Просто откройте файл .edmx и добавьте необходимые таблицы / хранимые процедуры / представления. Таблица / представление, не имеющее первичного ключа, будет создано как таблица / представление только для чтения.

Для таблицы / представления TABLE_NAME не определен первичный ключ. Ключ был выведен, и определение было создано как таблица / представление только для чтения.

Гианешвар Рао Н.
источник
1
в любом случае ошибка остается в некоторых случаях. Событие в EF 5.0
Грег З.
0

Вам не нужно удалять всю модель (это могут быть сотни таблиц!).

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

ТАК: УДАЛИТЕ соответствующие таблицы из модели (концептуальный режим) И из Model.Store, а затем обновите модель с помощью мастера и повторно добавьте только нужные таблицы.

RoyGr
источник
0

Просто добавлю еще несколько деталей для тех, кому не приходилось делать это раньше. Я использую Visual Studio 2013 с установленным обновлением 4. Я добавил несколько полей в таблицу, удалил таблицу из моей модели, затем пошел на обновление, и это не позволило мне проверить ни одну из таблиц.

У меня есть первичный ключ.

Я создал новую тестовую таблицу, которая появилась, и она позволила мне проверить ее, но не оригинал.

Я никогда раньше не открывал его в XML и не знал, как это сделать. Вы щелкаете правой кнопкой мыши файл .edmx и "открываете с помощью" - выбираете редактор xml.

рассматриваемая таблица была там в порядке, в ней даже были новые поля (странно).

Я удалил все ссылки на него (потребовалось пару раз) - после того, как вы удалите одну и сохраните, если вы попытаетесь открыть ее, и она не будет отображаться, просто выберите «просмотреть XML» - посмотрите на ошибки и в основном следите за прыгающим мячом, пока не очистите его.

надеюсь, что дополнительная деталь поможет кому-то.

Джо

Джо Рудер
источник
0

Я нашел один простой способ: (в SQL Server Management Studio) добавить столбец идентификатора типа INT, снять флажок «Разрешить пустые значения» и в разделе Свойства столбца (идентификатора) >> Спецификация удостоверения >> проверить (Идентичность) и сделать обязательно установлен инкремент.

Как только это будет сделано, вернитесь в окно .edmx, щелкните правой кнопкой мыши и обновите модель из базы данных.

Райан Д
источник
0

Вы можете добавить перекрестную таблицу столбца первичного ключа. Тогда проблема решается

Мехмет Курт
источник
0

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

В SSMS в разделе «Безопасность» щелкните правой кнопкой мыши пользователя или роль и выберите «Свойства». Затем нажмите Securables. В верхней таблице показаны таблицы, доступные в настоящее время. Если недостающих таблиц нет, нажмите на поиск и найдите, затем выделите их в верхней таблице, затем назначьте разрешения в нижней таблице.

Марк Уорролл
источник