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
Ответы
Ответ 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 работает хорошо для меня, и если мне нужно обновить внешний ключ, я просто сниму существующую модель и создаю новую.