Como utilizar Entity Framework 6 (EF6) com o MySQL no Godaddy, Winhost e Locaweb?

Como usar o EF6 (Entity Framework 6) com o MySQL na hospedagem do Godaddy, Winhost e Locaweb?

Como usar o EF6 (Entity Framework 6) com o MySQL na hospedagem do Godaddy, Winhost e Locaweb?

Há algumas semanas retomei um projeto em ASP.NET utilizando o Entity Framework 6 (EF6) com o MySQL. Utilizei a ferramenta  Microsoft Visual Studio 2013 para desenvolver o projeto, um aplicativo Web ASP.NET (.NET Framework 4). Porém, depois de terminado o projeto e funcionando perfeitamente na minha máquina local, quem diz que eu conseguia fazer rodar a aplicação depois de publicar em alguma hospedagem? Tentei publicar nessas empresas de hospedagem: Godaddy, Winhost e Locaweb.

Depois de muitas tentativas, pesquisas no Google sobre o problema, uma surra atrás da outra, um couro lascado!, cheguei até a baixar o Visual Studio 2017 Community e nada. No mesmo dia que liguei pro cliente dizendo que não conseguia entregar o projeto a contento, consegui encontrar a solução, pelo menos para o Godaddy e o Winhost, e aí já me dei por satisfeito. Porém, há uma explicação do porque não funciona na Locaweb e há uma sugestão do que fazer pra tentar contornar o problema, apesar de não ter testado, porque a essa altura eu já estava de saco cheio.

Resolvi então descrever um a passo a passo de como iniciar um projeto simples do zero no Visual Studio 2013, que acessa um banco de dados MySQL, utilizando o EF6 (Entity Framework 6). Incluí apenas uma tabela do banco de dados do MySQL ao modelo de dados da entidade (o arquivo .edmx) e o liguei a um componente da página para exibir os dados, semelhante a uma tabela (o Gridview). Espero que esse artigo venha a ser útil a quem estiver com esse problema ou estiver pensando em usar o EF6 (Entity Framework 6) num projeto ASP.NET com o MySQL.

Para iniciar os passos abaixo eu levo em conta que você já tem o Microsoft Visual 2013 instalado em sua máquina, e já trabalha com a ferramenta. Senão, então esse é o 1º passo: instalar o MS VS 2013 antes de começar os demais passos abaixo.

  1. Baixe do site dev.mysql.com o instalador do MySQL NET/Connector 6.9.9 e instale na máquina.
  2. Baixe do site dev.mysql.com o MySQL for Visual Studio 2.0.5 e instale na máquina.
  3. Inicie o Microsoft o Visual Studio 2013 e crie um projeto novo, um aplicativo Web ASP.NET (.NET Framework) vazio.
  4. Certifique-se de usar o .NET Framework versão 4.0, entre na propriedade do projeto para checar e modificar a versão se precisar.
  5. Instale os seguintes pacotes pelo prompt do NuGet no projeto e, depois em referências do projeto lembre-se de marcar a opção "Copy Local":
  6. Install-Package EntityFramework (Versão 6.1.3)

    Install-Package MySql.Data.Entity (Versão 6.9.9)

    Install-Package Microsoft.AspNet.EntityDataSource (Versão 6.0.0)

    Install-Package Microsoft.AspNet.DynamicData.EFProvider (Versão 6.0.0)


    (Execute o projeto para copiar as DLL para a pasta "bin")


    A instalação desses pacotes incluirá as seguintes DLLs ao projeto:

    EntityFramework.SqlServer.dll

    Microsoft.AspNet.DynamicData.EFProvider.dll

    Microsoft.AspNet.EntityDataSource.dll

    Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll

    MySql.Data.dll

    MySql.Data.Entity.EF6.dll

    WebApplication1.dll (Depois de compilado o projeto)

  7. Adicione um novo item "ADO.NET Entity Data Model", nome "Model1", configure o acesso ao banco de dados do MySQL com IP do servidor ou endereço, usuário e senha, e só inclua uma tabela para teste, de preferência uma com poucas linhas ou registros. No meu caso usei uma tabela chamada 'cadastro' com poucos registros e 03 campos: nome, email e telefone.
  8. Provedor de dados do MySQL

  9. Adicione um novo formulário Web (página .aspx) ao projeto, nome "WebForm1.aspx" e a defina como a página padrão.
  10. Arraste 02 componentes da caixa de ferramentas para a página, um "Gridview", nome "Gridview1" e um "EntityDataSource", nome "EntityDataSource1".
  11. Configure a fonte de dados do "EntityDataSource1" com a mesma conexão criada para o MySQL e usada no componente "Model1", e selecione a tabela 'cadastro' já configurada no modelo de dados.
  12. Assistente do modelador  da entidade de dados (Entity Framework 6)

  13. Conecte o "EntityDataSource1" à propriedade fonte de dados do "Gridview1" e habilite a paginação.
  14. Modifique o arquivo de configuração do projeto, o arquivo "web.config" para que fique assim:

<?xml version="1.0" encoding="utf-8"?>

<!--

  For more information on how to configure your ASP.NET application, please visit

  http://go.microsoft.com/fwlink/?LinkId=169433

  -->

<configuration>

  <configSections>

    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->

  </configSections>

  <system.web>

    <trust level="Full" />

    <customErrors mode="Off" />

    <compilation targetFramework="4.0" />

    <pages>

      <controls>

        <add tagPrefix="ef" assembly="Microsoft.AspNet.EntityDataSource" namespace="Microsoft.AspNet.EntityDataSource" />

      </controls>

    </pages>

  </system.web>

  <system.data>

    <DbProviderFactories>

      <remove invariant="MySql.Data.MySqlClient" />

      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.9.0" />

    </DbProviderFactories>

  </system.data>

  <entityFramework>

    <defaultConnectionFactory type="MySql.Data.Entity.MySqlConnectionFactory, MySql.Data.Entity.EF6" />

    <providers>

      <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" />

    </providers>

  </entityFramework>

  <connectionStrings>

    <add name="consultnameEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=MySql.Data.MySqlClient;provider connection string='server=###.###.###.###;user id=nomedousuario;persistsecurityinfo=True;includesecurityasserts=true;database=nomedobdmysql;password=&quot;********&quot;'" providerName="System.Data.EntityClient" />

    <add name="DbContext" providerName="MySql.Data.MySqlClient" connectionString="server=###.###.###.###;user id=nomedousuario;persistsecurityinfo=True;includesecurityasserts=true;database=nomedobdmysql;password=&quot;********&quot;" />

  </connectionStrings>

</configuration>

12. Salve e execute (f5) o projeto, e aí será exibida uma tabela HTML no navegador de internet com o conteúdo da tabela "cadastro". Se os dados da tabela não forem exibidos ou aparecer algum erro, repasse os passos acima, talvez tenha esquecido alguma coisa.

Página de teste ASP.NET conectada ao MySQL utilizando EF 6 (Entity Framework 6)

13. Publique os seguintes arquivos do projeto no provedor de hospedagem para funcionar na internet agora (ftp://ftp.seudominio.com.br):

    Na raiz:

  • Web.config
  • WebForm1.aspx
  • WebForm1.aspx.cs

    Na pasta "bin":

  • EntityFramework.dll
  • EntityFramework.SqlServer.dll
  • Microsoft.AspNet.DynamicData.EFProvider.dll
  • Microsoft.AspNet.EntityDataSource.dll
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll
  • MySql.Data.dll
  • MySql.Data.Entity.EF6.dll
  • WebApplication1.dll

E pronto, navegue no seu site para testar!

Porque esses passos do Projeto ASP.NET com MySQL e EF6 não funcionam na Locaweb ou em outros provedores de hospedagem?

Alguns ambientes de hospedagem estão sendo configurados para rodar sem aceitar atribuição de nível de confiança, e é esse o caso da Locaweb. A linha em amarelo "<trust level="Full" />" do "web.config" causa um erro de segurança no provedor de hospedagem da Locaweb e, testei também com o nível médio "<trust level="Medium" />" e nada.

Também acontece que algumas DLL's (bibliotecas) como a "MySQL.Data" após a versão 6.3.9 não são compatíveis com esse nível de segurança, gerando diversas exceções na aplicação, e impossibilitando a integração entre o MySQL e o Entity Framework.

Para solucionar esse problema será necessário seguir os esses passos:

  1. Baixe o MySQL Connector 6.3.9 através no site do desenvolver do MySQL do dev.mysql.com.
  2. Se já possuir uma versão instalada do MySQL Connector, remova-a, e depois instale o pacote 6.3.9.
  3. Faça referência às bibliotecas: "MySQL.Data", "MySQL.Data.Entity" e "MySQL.Web" no projeto Entity Framework e lembre-se de marcar a opção "Copy Local";
  4. Pode ser que o seu arquivo .edmx reclame do atributo Precision="0" para campos do tipo data (datetime), sendo assim basta você abrir o arquivo .edmx via XML, e remover o atributo Precision="0" de todos os campos tipo data (datetime).
  5. Insira o código abaixo no seu "web.config", pois em muitos casos mesmo copiando as DLL's do MySQL para a pasta "bin" do provedor, ele ainda continua puxando do GAC, então esse código vai liberar qualquer configuração de "Provider" e irá utilizar a sua DLL (biblioteca).
  6. <system.data>

      <DbProviderFactories>

        <clear />

        <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient"

        description=".Net Framework Data Provider for MySQL"

        type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,

          Version=6.3.9.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />

      </DbProviderFactories>

    </system.data>

Eu particularmente não testei esses passos pra ver se funciona o EF com MySQL na Locaweb porém, dependendo do seu nível de desespero, acredito que vale a pena tentar. Se o suporte da Locaweb não quiser mudar o nível de segurança do seu domínio então, em último caso você já sabe que funciona na Godaddy e Winhost.

[noex]

AFUNDAR: Como se diz em inglês?

To sink

"To sink" significa afundar, decair, deteriorar, destruir. Também significa coloquialmente ficar triste, deprimido. Como substantivo "sink" significa pia, cano de esgoto, fossa, sumidouro, local onde criminosos se encontram (antro). Em computação pode ser depósito, dissipador. "Data sink" significa depósito de dados e "heat sink" significa dissipador de calor.

What does mean "to sink"? "To sink" is a verb. The definition or meaning is "fall down below the surface (especially in water)". Another meaning or synonym would be "to submerge, to descend into something, to move down to a lower level, to invest, to fall, to descend, to slope or dip downward".

  1. The cruise liner sank yesterday / O cruzeiro de viagem afundou ontem.
  2. The announcement sank hopes of a recovery / O anúncio arruinou as esperanças de recuperação.
  3. My heart sinks when I think of her / Fico deprimido quando penso nela.
  4. He is sinking fast / Ele está decaindo rapidamente.
  5. She has sunk very low / Ela decaiu muito.
  6. She would never sink to your level / Ela nunca se rebaixaria ao seu nível.
  7. They agreed to sink their differences / Eles concordaram em deixar as diferenças de lado.
  8. Let’s sink a few beers / Vamos tomar algumas cervejas.

Qual é o significado de "to sink in" em inglês?

    "To sink in" significa entrar na cabeça no sentido de finalmente entender. Devagar começar a entender alguma coisa. Assimilar ao poucos, começar a entender o que aconteceu, "cair a ficha". Absorver ideias e sentimentos gradativamente. Absorver o golpe da notícia ou algum acontecimento. "To sink in" também significa afundar, afundar-se, submergir, infiltrar, penetrar, ensopar, investir.

  • I pay careful attention to everything I hear in calculus class, but it usually doesn't sink in / Eu presto muita atenção à tudo que ouço na aula de cálculo, mas geralmente não entra nada na cabeça.
  • It might take days for the oil to sink in, so you have time to clean it up / Pode levar dias para o óleo submergir, portanto terá tempo para limpá-lo.
  • She sank in a lot of money, but it was all wasted / Ela investiu muito dinheiro, mas foi tudo perdido.
  • I refuse to sink in / Recuso-me a afundar | Eu me recuso a afundar.

Qual é o significado de "pia" em inglês?

    "Sink" é pia em inglês. Uma pia pode ser uma pedra cavada para receber líquidos. Ou uma bacia de louça ou de ferro esmaltado de forma retangular, fixada junto à parede da cozinha, geralmente com água encanada, destinada a lavar pratos, talheres etc., ou em outras dependências, para lavar as mãos e o rosto; lavatório, lavabo.

  • He washed himself at the sink / Ele se lavou na pia.
  • I washed my hands at the handbasin / Eu lavei as minhas mãos na pia de lavar as mãos (lavabo).
  • She wahed the dishes at the kitchen sink / Ela lavou os pratos na pia da cozinha.

Algumas tipos de pia em inglês:

  • Kitchen sink / Pia de cozinha em inglês.
  • Lavatory basin / Pia de lavabo em inglês.
  • Wash basin, handbasin / Pia de lavatório em inglês.
  • Baptismal font / Pia batismal em inglês.

Algumas expressões verbais com "to sink":

  • To sink back / Cair para trás.
  • To sink capital in / Investir capital em.
  • To sink down / Cair, ficar prostrado.
  • To sink in / Devagar começar a entender alguma coisa.
  • To sink in value / Desvalorizar-se.
  • To sink into oblivion / Cair no esquecimento.
  • To sink or swim / Ou vai ou racha.
  • To sink to one’s knees / Cair de joelhos.

Como se diz “olho grande”, “olho gordo” e “mau-olhado” em inglês?

&quot;Evil eye, greedy eye&quot; significam olho grande, olho gordo ou mau-olhado em ingl&#234;s. Como se diz, fala e escreve olho gordo em ingl&#234;s?

Evil eye | Greedy eye

"Evil eye, greedy eye" significam olho grande, olho gordo ou mau-olhado em inglês, expressões racionadas a inveja e cobiça (ganância).

"Mau-olhado" é definido pelo dicionário Aurélio como feitiço ou quebranto que a crendice popular atribui ao olhar de certas pessoas, e que influiria nas crianças robustas, nas plantas e nos animais domésticos, causando-lhes atraso no desenvolvimento, ou perda, ou morte. O dicionário Caldas Aulete traz as seguintes definições de "mau-olhado", olhar maldoso, destrutivo, de inveja, de mal-querença, que se supõe prejudicial àquele a que se destina; a suposta capacidade de fazer mal de um olhar assim; O efeito causado por esse olhar.

Quem é supersticioso acredita que o poder do olho gordo, do olho grande ou do mau-olhado pode infligir dano, prejuízo ou má sorte através de quem encara ou olha, "secando" a sorte de outro.

What does mean "evil eye/greedy eye"? "an evil eye/an greedy eye" are informal expressions. The definition or meaning is "to be cast by a malevolent glare, usually given to a person when they are unaware." Another meaning or synonym would be "a look that someone gives other people that is believed to have the power to injure or harm them".

  1. Ann gave his cat the evil eye, hoping it would stay out of her garden / A Ana olhou pro gato dele com mau-olhado, na esperança de que ele ficasse longe do seu jardim.
  2. I saw him giving me the evil eye, so I turned around and walked the other way / Eu vi ele me dando aquele mau-olhado, então me virei e fui pro outro lado.
  3. They say that the old lady living in the house at the end of the road has an evil eye / Dizem que a senhora que mora na casa do final da rua tem mau-olhado.
  4. She believed someone had put the evil eye on her cattle, causing them to sicken and die / Ela acreditava que alguém pôs mau-olhado no seu gado, fazendo-o adoecer e morrer.
  5. Money hungry greedy eye rule the world / O olho gordo pelo dinheiro governa o mundo.

O que significa "greedy" em inglês?

    "Greedy" significa ganancioso em inglês. Em que há ganância (greed) ou ávido de ganho. Que tem ambição de ganhar; que só tem em vista o lucro.

  • Don't be so greedy but share with them / Não seja tão ganancioso, mas compartilha com eles.
  • She is greedy for a title / Ela está ávida por um título. (muito afim)
  • It´s conspicuous their greed for power/ É evidente a ganância deles por poder.
  • I´ve never knew someone else so greedy for money as Brazilian politicians / Nunca conheci ninguém tão ganancioso por dinheiro como os políticos brasileiros.