ADO.NET Entity Framework: мастер обновления не будет добавлять таблицы - PullRequest
87 голосов
/ 13 февраля 2009

I добавил новую модель данных объекта 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>-->

Спасибо Крейг за ваш ответ.

Ответы [ 11 ]

43 голосов
/ 13 февраля 2009

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

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

37 голосов
/ 21 июля 2010

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

10 голосов
/ 29 апреля 2012

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

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

3. Вместо создания новой таблицы Primary Column to Exiting, я сделаю составной ключ, включив все существующие столбцы. (WORKED)

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

5 голосов
/ 01 марта 2017

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

5 голосов
/ 13 января 2015

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

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

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

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

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

1 голос
/ 05 апреля 2019

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

1 голос
/ 18 апреля 2013

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

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

1 голос
/ 22 апреля 2009

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

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

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

0 голосов
/ 05 августа 2015

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

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

0 голосов
/ 17 декабря 2014

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

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

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

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

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

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

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

Джо

...