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 (IList11 ошибки, список
columns, IList1& keyColumns, List1 & excludedColumns,
Список1& invalidKeyTypeColumns) at1
Microsoft.Data.Entity.Design.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntityType(IList
столбцы, логические & needsDefiningQuery) на
Microsoft.Данные.Сущность.Дизайн.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets (IEnumerable11
tableDetailsRows, EntityRegister entityRegister, IList
entitySetsForReadOnlyEntityTypes, DbObjectType objectType) at
Microsoft.Данные.Сущность.Дизайн.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.CreateEntitySets (IEnumerable11 tableDetailsRowsForViews,
tableDetailsRowsForTables, IEnumerable
EntityRegister entityRegister) на
Microsoft.Данные.Сущность.Дизайн.VersioningFacade.ReverseEngineerDb.StoreModelBuilder.Сборка (StoreSchemaDetails
storeSchemaDetails) на
Microsoft.Данные.Сущность.Дизайн.VisualStudio.Модельвизард.Двигатель.Модельгенератор.CreateStoreModel()
на
Microsoft.Данные.Сущность.Дизайн.VisualStudio.Модельвизард.Двигатель.Модельгенератор.GenerateModel (List11 ошибок) в
errors) at
Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine.GenerateModels(String
storeModelNamespace, List
Microsoft.Данные.Сущность.Дизайн.VisualStudio.Модельвизард.Двигатель.ModelBuilderEngine.GenerateModel (EdmxHelper
edmxHelper)'. Загрузка метаданных из базы данных заняла
00: 00: 00.5856317.
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.
Я надеюсь, что это помогает другим :)
значение столбца '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