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

Я добавил новую модель данных сущностей 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>-->

Ответ 1

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

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

Ответ 2

Установите основные ключи для всех таблиц или только один флажок "Разрешить null" для любого столбца каждой таблицы. Это работает для меня:)

Ответ 3

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

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

3. Вместо создания новой таблицы "Первичный столбец в выход" я создам составной ключ, используя все существующие столбцы. (WORKED)

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

У меня были некоторые проблемы с этим (Модель данных Entity Data Ado.Net, не обновляющая корректно)

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

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

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

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

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

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

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

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

Джо

Ответ 11

Один простой способ, которым я нашел, заключался в том, чтобы (в SQL Server Management Studio) добавить столбец идентификаторов типа INT, снимите флажок "Разрешить Nulls" и в свойствах столбца (идентификатора) → Спецификация идентификации → проверьте (Is Identity), и убедитесь, что установлен инкремент.

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