The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull

Seu Visual Studio está tentando se conectar ao seu banco MySQL e está obtendo o erro "The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull"?

Um problema super chato é a integração que o MySQL faz com o Visual Studio, que não tem o mesmo capricho que a com o SQL Server. E um erro muito comum devido à alguma coisa que ficou mal feita nessa integração é receber o erro The value for column 'IsPrimaryKey' in table 'TableDetails' is DBNull ao tentar criar uma Entity Model pro banco.

Para resolver o problema, no meu caso, o que tive que fazer foram duas coisas:

Etapa 1: Checar a conexão do meu MySQL:

Parece brincadeira, mas eu fui notar depois de apanhar tentando configurar o "lower_case_table_names = 2" que meu MySQL Workbench estava referenciando uma versão de banco que não era a que eu tinha instalado. Não sei como que o banco estava rodando, afinal, mas eu instalei a versão 5.7 do MySQL e o Workbench tava mencionando o uso do MySQL 5.0.

Minha instalação do MySQL (5.7)

Minha conexão no Workbench apontando pra um Options File nada a ver com minha versão!

Para forçar o MySQL Workbench a enxergar meu banco na versão certa do MySQL, utilizei a opção “Configure Server Management”  no wizard de nova conexão:


Configurar o servidor MySQL em que vou me conectar...


Aí, é só dar "Next, Next"... Nesta tela, você irá ver que nesta conexão o Workbench vai apontar pra versão certa e MySQL.

Quando o wizard acabar, vai voltar para a tela de conexão. Aí, sim, você pode criar a conexão, que vai estar apontando pra versão certa de MySQL.

Etapa 2: Rodar o famosinho SQL para ajustar seu banco MySQL pro EF do VS conectar:

Após estar com sua conexão apontando pro seu banco (vide etapa anterior), aí sim você pode executar o SQL que a internet toda aponta como a solucionadora do problema entre o Entity Framework do seu Visual Studio e seu banco MySQL:
 
use <nome_do_banco>; -- Exemplo: use livraria;
set global optimizer_switch='derived_merge=off';
set optimizer_switch='derived_merge=off';
select @@optimizer_switch;

Antes de ter visto esse problema da conexão do MySQL, tentei este script e um milhão de soluções que achei nos fóruns, instalei e desinstalei tanta coisa, mexi em tanto arquivo e no final nada dava certo. Aí, vendo este problema n meu Workbench, vi que estava executando este script no banco "da versão errada". Fiz a etapa 1 pra corrigir minha conexão, e aí este SQL resolveu o meu problema.

Quando eu executo este SQL, eu geralmente reinicio meu VS.

Tem uma coisa, pessoal: cada vez que você fizer uma alteração no seu banco de dados, você vai precisar executar este SQL de novo.

O que esse SQL faz? Preciso pesquisar, ainda...

E é isso. Até melhorarem a conexão do EF com o MySQL no VS, vamos usando deste artifício chato... Boa sorte!




 

0 comentários

Envie seu comentário