Utilizzo di MySQL con Entity Framework [chiuso]


269

Non riesco a trovare nulla di rilevante su Entity Framework / MySQL su Google, quindi spero che qualcuno lo sappia.


8
francamente, il supporto mysql per LINQ è una schifezza! Sto sbattendo la testa su problemi minori nell'ultima settimana: | ...
effkay

1
hai usato dblinq code.google.com/p/dblinq2007 ?
Sharique

Risposte:


193

È stato rilasciato - Ottieni il connettore MySQL per .Net v6.5 - questo ha il supporto per [Entity Framework]

Stavo aspettando questo per tutto il tempo, sebbene il supporto sia di base, funziona per la maggior parte degli scenari di base di interazione db. Ha anche l'integrazione di base di Visual Studio.

AGGIORNAMENTO http://dev.mysql.com/downloads/connector/net/ A partire dalla versione 6.7, Connector / Net non includerà più l'integrazione di MySQL per Visual Studio. Questa funzionalità è ora disponibile in un prodotto separato chiamato MySQL per Visual Studio disponibile utilizzando MySQL Installer per Windows (vedere http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html ).


4
Ho pensato di menzionare che l'ultima versione è disponibile qui (attuale 6.2.2): mysql.com/downloads/connector/net
Brett Ryan

3
Questo supporta EF4 e VS2010? Ho installato il connettore e ho provato ad aggiungere una nuova connessione in VS2010 ma MySQL non compare nell'elenco dei provider
Abhijeet Patel

1
Sono curioso di MySQL, EF4 e VS2010.
Vinicius Rocha

1
Dovrebbe se hai il connettore più recente. Ho appena spostato il mio prodotto su .NET4 appositamente per il supporto di MySQL Entity. Gli strumenti e tutto funzionano bene, ma il grosso problema è il supporto sottostante che fornisce per le query effettive. Ci sono alcuni problemi con le espressioni lamba che non incontri con MSSQL
David Anderson

1
Naturalmente, ci sono nuove versioni in uscita. Ora supporta EF5, versione 6.7.4: dev.mysql.com/downloads/connector/net/#downloads Inoltre, poiché questa versione, il plug-in VS con il server MySQL e altri strumenti inclusi è incluso in un pacchetto: dev.mysql.com / risorse-tecniche / articoli /…
Nullius

22

Ho corretto la codifica di quel collegamento: gli utenti ora possono fare clic con il pulsante destro del mouse anziché dover copiare / incollare o selezionare / goto
kͩeͣmͮpͥ ͩ

7
Il collegamento non funziona
MüllerDK

2
È possibile accedere agli articoli con questo link: pattersonc.com/blog/2009/04
Andy White

L'uso di MYSQL con EF è migliorato o ci sono ancora problemi? Se SQL Server è preferibile, qualcuno può individuare esattamente perché SQL Server è preferibile solo perché è lo stesso fornitore Microsoft?
user3508811


7

Non si tratta di SM e di ciò che vogliono. Hanno creato un * sistema aperto per consentire ad altri di collegare i 'fornitori' - postgres e sqlite ce l'hanno - mysql è solo laggin ... ma, buone notizie per chi è interessato, anch'io stavo cercando questo e ho scoperto che il connettore MySql / Net 6.0 lo avrà ... puoi verificarlo qui:

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


1
Mi chiedo cosa significhi "iniziale" quando hanno detto "supporto per Entity Framework iniziale".
vintana

5

Avresti bisogno di un fornitore di mappe per MySQL. Questa è una cosa in più di cui Entity Framework ha bisogno per realizzare la magia. Questo blog parla di altri fornitori di mappe oltre a quello fornito da Microsoft. Non ho trovato alcuna menzione di MySQL.


Si hai ragione. Speravo ci fosse qualcosa di pronto in questo momento.
vintana

2

Vintana,

Ovviamente c'è qualcosa di pronto adesso. http://www.devart.com/products.html - è commerciale anche se (hai un IIRC di prova di 30 giorni). Si guadagnano da vivere scrivendo fornitori, quindi immagino che dovrebbe essere veloce e stabile. Conosco aziende davvero grandi che utilizzano il loro provider Oracle invece di Orace e MS.


Grazie per la vostra risposta. @Vintana, puoi trovare maggiori informazioni su dotConnect per MySQL e sui suoi vantaggi qui devart.com/dotconnect/mysql . Per migliorare il tuo lavoro con le entità Entity Framework forniamo uno strumento avanzato per la creazione di modelli visivi: Entity Developer devart.com/entitydeveloper .
Devart

1

Fai attenzione quando usi il connettore .net, il connettore 6.6.5 ha un bug, non funziona per l'inserimento di valori tinyint come identità, ad esempio:

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

se provi a inserire un oggetto come questo:

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

Otterrai un'eccezione di riferimento nulla:

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()

Fino ad ora non ho trovato una soluzione, ho dovuto cambiare la mia identità tinyint in identità int non firmata, questo ha risolto il problema ma questa non è la soluzione giusta.

Se usi una versione precedente di Connector.net (io ho usato la 6.4.4) non avrai questo problema.

Se qualcuno conosce la soluzione, per favore contattami.

Saluti!

Oware


L'errore viene generato perché p è nullo. Devi prima creare una nuova istanza vuota dell'oggetto. Cioè Persona p = nuova Persona (); non Persona p; Quindi:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Dave

scusa mi sono dimenticato di aggiungere la nuova riga, anche se aggiungo la nuova riga, l'errore continua a essere visualizzato
oware

Il bug è stato risolto nella versione 6.8.2. bugs.mysql.com/bug.php?id=70888 Connector / Net 6.8.3 viene rilasciato. dev.mysql.com/downloads/connector/net
Der_Meister



0

Se sei interessato a eseguire Entity Framework con MySql su mono / linux / macos, questo potrebbe essere utile https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/


L'uso di MYSQL con EF è migliorato o ci sono ancora problemi? Se SQL Server è preferibile, qualcuno può individuare esattamente perché SQL Server è preferibile solo perché è lo stesso fornitore Microsoft?
user3508811

Non sono sicuro di come sia adesso, ma abbiamo avuto un'esperienza piuttosto negativa a causa della mancanza di funzionalità e nel complesso è incoerente. MS MSQL è decisamente preferibile, perché Microsoft mette al primo posto il proprio stack.
Igor Yalovoy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.