Подтвердить что ты не робот

MySQL - Entity: значение для столбца IsPrimaryKey в таблице "TableDetails" - DBNull

Я использую Visual Studio 2013 с Entity Framework 5 и M ySQL Server 5.7.9.

При попытке создать модель из базы данных (или "Обновить модель из базы данных" ) появится следующее сообщение:

'System.Data.StrongTypingException: значение для столбца "IsPrimaryKey" в таблице "TableDetails" - это DBNull. --- > System.InvalidCastException: указанный листинг недействителен.

Я знаю, что этот вопрос задавали раньше, но я не нашел никакого решения. Также у меня нет возможности понизить до MySQL 5.6.

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

Таблица примеров

CREATE TABLE new_table
(
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(45) NOT NULL,
  PRIMARY KEY (id)
) 
ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Если таблица состоит только из Первичного ключа, тогда модель создается так, как должна.

EDIT: Если я создаю оба поля PRIMARY Keys, модель создается без ошибок.

Кто-нибудь имеет представление об этом?

С уважением.

Полный стек ошибок:

Невозможно создать модель из-за следующего исключения: 'System.Data.StrongTypingException: значение для столбца "IsPrimaryKey" в таблице "TableDetails" - это DBNull. --- > System.InvalidCastException: указанный листинг недействителен. в Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey() --- Конец внутренней трассировки стека исключений - в Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.SchemaDiscovery.TableDetailsRow.get_IsPrimaryKey() в Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateProperties(IList 1 columns, IList 1 ошибка, список 1& keyColumns, List 1 & excludedColumns, Список 1& invalidKeyTypeColumns) at Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList 1 столбцы, булевы & needsDefiningQuery) на Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable 1 tableDetailsRows, EntityRegister entityRegister, IList 1 entitySetsForReadOnlyEntityTypes, DbObjectType objectType) при Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets(IEnumerable 1 tableDetailsRowsForTables, IEnumerable 1 tableDetailsRowsForViews, EntityRegister entityRegister) в Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Build(StoreSchemaDetails storeSchemaDetails) в Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.CreateStoreModel() в Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelGenerator.GenerateModel(список 1 errors) at Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String storeModelNamespace, List 1 ошибка) в Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModel(EdmxHelper edmxHelper). Загрузка метаданных из базы данных 00: 00:. 00,5856317

4b9b3361

Ответ 1

Entity Framework (версия 6.1.3) и MySQL Server ( >= 5.7.6)

Один из способов решения проблемы -

1. Open Services (services.msc) and restart MySQL57 service.
2. Execute the following commands in MySQL.
   use <<database name>>;
   set global optimizer_switch='derived_merge=OFF';
3. Update the .edmx.

Это поздний ответ. Но надеюсь, что это поможет кому-то.

Спасибо.

Ответ 2

Это ошибка поиска: http://bugs.mysql.com/bug.php?id=79163

Запустите команду в консоли mysql:

установить глобальный optimizer_switch = 'производный_merge = off'

ИЛИ

set @@optimizer_switch = 'deriv_merge = OFF'

(этот работал у меня)

Убедитесь, что изменение действует с помощью этой команды:

SELECT @@optimizer_switch\G

https://dev.mysql.com/doc/refman/5.7/en/switchable-optimizations.html

Ответ 3

Каждый ответ выше работает отлично, но когда сервер или dev-машина перезагружается, мы должны делать все шаги снова и снова. Чтобы полностью решить проблему, мы можем поместить это значение "output_merge = OFF" в конфигурацию mysql. Итак, для этого вам нужно получить доступ к серверу MySQL с помощью MySQL Workbench и открыть вкладку "Файл опций" > "Выбор производительности". В группе Optimizer найдите optimizer_switch, установите флажок, чтобы включить поле, и поместите 'output_merge = OFF'. Перезагрузите сервер в services.msc и voilá!

Ответ 4

Для меня работал следующий sql:

use adventureworks;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;

Моя версия MySQL - 5.7.15, и я использовал опцию "EF Designer From Database" из Visual Studio 2015.

Я надеюсь, что это поможет другим:)

Ответ 5

Обходной путь SET GLOBAL optimizer_switch = 'производный_merge = off';

Ответ 6

Значение для столбца "IsPrimaryKey" в таблице "TableDetails" - это DBNull

Что происходит, когда вы пытаетесь использовать MySql среди Entity Framework.

Я решил так:

Откройте MySQL 5.7 для командной строки, введите свой пароль, нажмите клавишу ввода и введите:

set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';

select @@optimizer_switch;
select @@GLOBAL.optimizer_switch;

Перезагрузите Visual Studio, вам хорошо идти, я пробовал VS 2013 и VS 2017, и работал в обоих!

Ответ 7

Запустите этот script, он отлично работает для меня при использовании пакета MySql.Data.Entity nugget

use YourDB;
   set global optimizer_switch='derived_merge=OFF';

Ответ 8

Мы столкнулись с такой же ошибкой. Но, я думаю, это проблема сервера MySQL.

Статус:

  • EF5
  • MySQL VS Tools 1.2.5
  • VS community 2015
  • С#
  • из базы данных создайте EF Designer (я использую японское издание, поэтому название меню - это мой английский...)

Результат:

  • Ошибка MySQL 5.7.9 = > .
  • MySQL 5.6.26 = > нет ошибки.

Ответ 9

В моем случае:

Используемые модули:

Entity Framework 6 Разъем данных MySql 6.9.9 MySQL VS Tools 1.2.6 Инструменты EF6 для VS2015

Я должен это сделать = > SET GLOBAL optimizer_switch = 'производный_merge = off'; Но если loggin с "root" пользователем, ошибка продолжается. Когда loggin с "обычным" пользователем, он создает модель OK.

Ответ 10

С сегодняшнего дня это подтвержденная ошибка MySql Community Server 5.7.9 с идентификатором 79163.

В качестве обходного решения я переделал приложение для использования Практики Code First

(Объект данных объекта ADO.NET → Пустой код Первая модель)

и вручную добавили все объекты и их свойства.

Используемые модули:

  • Entity Framework 6
  • Разъем данных MySql 6.8.9
  • MySQL VS Tools 1.2.5
  • Инструменты EF6 для VS2013

Ответ 11

Я нашел хорошее обходное решение для такого типа ошибок.

1. Решение (сначала база данных) Вместо того, чтобы пытаться обновить существующую модель в файле .edmx, щелкните правой кнопкой мыши одну из ваших сущностей в edmx и выберите → перейти к modelbrowser (новый регистр появится в проводнике карт проекта). Теперь выберите объект, который хотите обновить, щелкните правой кнопкой мыши и сделайте обновление. В моем случае он работал каждый раз без необходимости отключать что-либо в mysql. Но может случиться так, что вы будете вынуждены изменить некоторые отношения вручную. Если что-то здесь не так (в моем случае нет проблем с ключом non fk/pk.Если вы удалите fk и попробуете самостоятельно упорядочить все отношения, то ваш db может быть удален. Но это никогда не происходит, если вы просто обновляете не первичные/атрибуты внешнего ключа или просто добавление новой таблицы.

EDIT: Это решение отлично подходит для удаления, обновления и добавления новых отношений. Это вызывает проблемы при выполнении обновлений по атрибутам fk/pk!

Если ваша таблица была удалена, просто создайте новую с теми же настройками.

2. Решение (сначала база данных, когда необходимо обновить ключи pk/fk) отбросить таблицу и создать новую. Это занимает 3 минуты вместе

Надеюсь, я смогу немного помочь, эта ошибка заставила меня сходить с ума на последние 2 недели!

p.s. я никогда не испытывал этот тип ошибки до тех пор, пока я не перезаписал! внешний ключ в существующем отношении в mysql. Затем я попытался обновить отношение с сущностью (сначала база данных), а с тех пор появился dbNullBug. Я смог управлять своими объектами вручную, добавляя и удаляя существующие атрибуты, но это было действительно утомительно. Решение 1 работает хорошо для меня, и если мне нужно обновить внешний ключ, я просто сниму существующую модель и создаю новую.