Usando o MySQL com Entity Framework [fechado]

269

Não consigo encontrar nada relevante sobre o Entity Framework / MySQL no Google, então espero que alguém saiba disso.

vintana
fonte
8
falando francamente, o suporte do mysql ao LINQ é uma porcaria! Estou batendo minha cabeça em questões menores na última semana: | ...
effkay
1
você usou o código dblinq.google.com/p/dblinq2007 ?
Sharique

Respostas:

193

Foi lançado - Obtenha o conector do MySQL para .Net v6.5 - isso tem suporte para [Entity Framework]

Eu estava esperando por isso o tempo todo, embora o suporte seja básico, funcione para os cenários mais básicos de interação com o banco de dados. Ele também possui integração básica do Visual Studio.

ATUALIZAÇÃO http://dev.mysql.com/downloads/connector/net/ A partir da versão 6.7, o Connector / Net não incluirá mais a integração do MySQL para Visual Studio. Agora, essa funcionalidade está disponível em um produto separado chamado MySQL para Visual Studio, disponível no MySQL Installer para Windows (consulte http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html ).

Vin
fonte
4
Eu pensei que eu ia mencionar que a versão mais recente está disponível aqui (6.2.2 atual): mysql.com/downloads/connector/net
Brett Ryan
3
Isso suporta EF4 e VS2010? Eu instalei o conector e tentou adicionar uma nova conexão no VS2010, mas o MySQL não aparece na lista de provedores
Abhijeet Patel
1
Estou curioso sobre MySQL, EF4 e VS2010.
Vinicius Rocha
1
Deveria se você tiver o conector mais recente. Acabei de mudar meu produto para o .NET4 especificamente por causa do suporte ao MySQL Entity. As ferramentas e tudo funcionam bem, mas o grande problema é o suporte subjacente que ele fornece para consultas reais. Há alguns problemas com expressões lamba que você não correr em com MSSQL
David Anderson
1
Claro, há novas versões sendo lançadas. Agora suportando o EF5, versão 6.7.4: dev.mysql.com/downloads/connector/net/#downloads Além disso, desde esta versão, o plug-in VS com servidor MySQL e outras ferramentas incluídas estão incluídos em um pacote: dev.mysql.com / tech-resources / articles /…
Nullius 19/07/2013
22

Confira meu post sobre esse assunto.

http://pattersonc.com/blog/index.php/2009/04/01/using-mysql-with-entity-framework-and-aspnet-mvc-–-part-i/

pattersonc
fonte
Fixei a codificação dessa ligação - agora os usuários podem clicar para a direita através invés de ter que copiar / colar ou selecione / Goto
Kemp ͩ
7
Fazer a ligação não funciona
MüllerDK
2
Você pode acessar os artigos com este link: pattersonc.com/blog/2009/04
Andy White
O uso do MYSQL com EF ficou melhor ou ainda há problemas? Se o servidor SQL é preferível, alguém pode identificar exatamente por que o servidor SQL é preferível apenas porque é o mesmo fornecedor da Microsoft?
user3508811
7

Não se trata de MS e o que eles querem. Eles criaram um * sistema aberto para outros plugarem 'provedores' - postgres e sqlite - o mysql está apenas atrasado ... mas, boas notícias para os interessados, eu também estava procurando por isso e descobri que o MySql Connector / Net 6.0 terá ... você pode conferir aqui:

http://www.upfromthesky.com/blog/post/2009/03/24/MySql-Supports-the-Entity-Framework.aspx


fonte
1
Eu me pergunto o que "inicial" significa quando eles disseram "suporte do Framework de entidade inicial".
Vintana
5

Você precisaria de um provedor de mapeamento para MySQL. Isso é algo extra que o Entity Framework precisa para fazer a mágica acontecer. Este blog fala sobre outros provedores de mapeamento além do que a Microsoft está fornecendo. Não encontrei nenhuma menção ao MySQL.

Lars Truijens
fonte
Sim você está certo. Eu esperava que houvesse algo pronto agora.
vintana 16/09/08
2

Vintana,

Od curso, há algo pronto agora. http://www.devart.com/products.html - embora seja comercial (você tem um teste de 30 dias IIRC). Eles ganham a vida escrevendo fornecedores, então acho que deve ser rápido e estável. Conheço grandes empresas que usam seu provedor Oracle em vez de Orace e MS.

aaimnr
fonte
Obrigado pela sua resposta. @Vintana, você pode encontrar mais informações sobre o dotConnect for MySQL e suas vantagens aqui devart.com/dotconnect/mysql . Para melhorar seu trabalho com as entidades do Entity Framework, fornecemos uma ferramenta avançada para criação de modelo visual - Entity Developer devart.com/entitydeveloper .
precisa
1

Cuidado ao usar o conector .net, o Connector 6.6.5 possui um erro, ele não está funcionando para inserir valores tinyint como identidade, por exemplo:

create table person(
    Id tinyint unsigned primary key auto_increment,
    Name varchar(30)
);

se você tentar inserir um objeto como este:

Person p;
p = new Person();
p.Name = 'Oware'
context.Person.Add(p);
context.SaveChanges();

Você receberá uma exceção de referência nula:

Referencia a objeto no establecida como instancia de un objeto.:
   en MySql.Data.Entity.ListFragment.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.SelectStatement.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.InsertStatement.WriteSql(StringBuilder sql)
   en MySql.Data.Entity.SqlFragment.ToString()
   en MySql.Data.Entity.InsertGenerator.GenerateSQL(DbCommandTree tree)
   en MySql.Data.MySqlClient.MySqlProviderServices.CreateDbCommandDefinition(DbProviderManifest providerManifest, DbCommandTree commandTree)
   en System.Data.Common.DbProviderServices.CreateCommandDefinition(DbCommandTree commandTree)
   en System.Data.Common.DbProviderServices.CreateCommand(DbCommandTree commandTree)
   en System.Data.Mapping.Update.Internal.UpdateTranslator.CreateCommand(DbModificationCommandTree commandTree)
   en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.CreateCommand(UpdateTranslator translator, Dictionary`2 identifierValues)
   en System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
   en System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)
   en System.Data.EntityClient.EntityAdapter.Update(IEntityStateManager entityCache)
   en System.Data.Objects.ObjectContext.SaveChanges(SaveOptions options)
   en System.Data.Entity.Internal.InternalContext.SaveChanges()
   en System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
   en System.Data.Entity.DbContext.SaveChanges()

Até agora não encontrei uma solução, tive que mudar minha identidade tinyint para identidade int sem sinal, isso resolveu o problema, mas essa não é a solução certa.

Se você usa uma versão mais antiga do Connector.net (usei 6.4.4), não terá esse problema.

Se alguém souber da solução, entre em contato comigo.

Felicidades!

Oware

oware
fonte
O erro é gerado porque p é nulo. Você deve criar uma nova instância vazia do objeto primeiro. Ou seja, Pessoa p = nova Pessoa (); não Pessoa p; Então:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Dave
desculpe, eu esqueci de acrescentar a nova linha, mesmo se eu adicionar a nova linha, os alambiques de erro que aparecem
oware
O bug foi corrigido na versão 6.8.2. É lançado o bugs.mysql.com/bug.php?id=70888 Connector / Net 6.8.3. dev.mysql.com/downloads/connector/net
Der_Meister
0

Se você estiver interessado em executar o Entity Framework com MySql no mono / linux / macos, isso pode ser útil https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/

Igor Yalovoy
fonte
O uso do MYSQL com EF ficou melhor ou ainda há problemas? Se o servidor SQL é preferível, alguém pode identificar exatamente por que o servidor SQL é preferível apenas porque é o mesmo fornecedor da Microsoft?
user3508811
Não tenho certeza de como está agora, mas tivemos uma experiência muito ruim devido à falta de recursos e à inconsistência geral. MS MSQL é definitivamente preferível, porque a Microsoft coloca sua própria pilha em primeiro lugar.
Igor Yalovoy