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



Я использую Visual Studio 2013 С Entity Framework 5 и МySQL сервер 5.7.9.



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




'.Данные.StrongTypingException: значение для столбца
'IsPrimaryKey 'в таблице' TableDetails ' является DBNull . ---> Система.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:
Если я сделаю оба поля первичными ключами, модель будет создан без каких-либо ошибок.



кто-нибудь знает об этом?



С Уважением.



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




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


611   11  

11 ответов:

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.

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

спасибо.

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

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

set global optimizer_switch= 'derived_merge=off'

или

set @@optimizer_switch= 'derived_merge=OFF'

(Это один работал для меня)

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

выбрать @@optimizer_switch\G

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

каждый ответ выше работает нормально, но когда сервер или dev-машина перезапущена, нам нужно сделать все шаги снова и снова. Чтобы решить полностью, мы можем поместить этот attibute 'derived_merge=OFF' в конфигурацию mysql. Хорошо, для этого вам нужно получить доступ к серверу MySQL с помощью de MySQL Workbench и открыть "файл опций" > выберите вкладку Производительность. В группе оптимизатор найдите optimizer_switch, установите флажок, чтобы включить поле, и поместите 'derived_merge=OFF'. Перезагрузите сервер в сервисы.мск и вуаля!

следующий 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.

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

решение Установите глобальный optimizer_switch= 'derived_merge=off';

значение столбца 'IsPrimaryKey' в таблице 'TableDetails' равно DBNull

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

Я решил таким образом:

откройте клиент командной строки MySQL 5.7, введите пароль, нажмите enter, а затем введите:

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, и работал в обоих!

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

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

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

статус:

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

результат:

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

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

Модули:

Entity Framework 6 MySQL Data Connector 6.9.9 MySQL VS Tools 1.2.6 EF6 инструменты для VS2015

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

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

в качестве обходного пути я изменил приложение для использования Код "Первый"!--2--> практика

(ADO.NET объект данных сущности - > пустой код первой модели)

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

Модули:
  • Entity Framework 6
  • MySQL Data Connector 6.8.9
  • MySQL VS Tools 1.2.5
  • EF6 инструменты для VS2013

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

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

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

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

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

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

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

Comments

    Ничего не найдено.