Używanie MySQL z Entity Framework [zamknięte]


269

Nie mogę znaleźć niczego istotnego na temat Entity Framework / MySQL w Google, więc mam nadzieję, że ktoś o tym wie.


8
Szczerze mówiąc, wsparcie mysql dla LINQ to bzdura! Uderzam głową w drobne problemy przez ostatni tydzień: | ...
effkay

1
czy korzystałeś z dblinq code.google.com/p/dblinq2007 ?
Sharique

Odpowiedzi:


193

Zostało wydane - Pobierz konektor MySQL dla .Net v6.5 - ma on obsługę [Entity Framework]

Czekałem na to cały czas, chociaż wsparcie jest podstawowe, działa w większości podstawowych scenariuszy interakcji z db. Ma również podstawową integrację Visual Studio.

AKTUALIZACJA http://dev.mysql.com/downloads/connector/net/ Począwszy od wersji 6.7, Connector / Net nie będzie już zawierał integracji MySQL dla Visual Studio. Ta funkcja jest teraz dostępna w osobnym produkcie o nazwie MySQL for Visual Studio, dostępnym za pomocą Instalatora MySQL dla systemu Windows (patrz http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html ).


4
Pomyślałem, że wspomnę, że najnowsza wersja jest dostępna tutaj (bieżące 6.2.2): mysql.com/downloads/connector/net
Brett Ryan

3
Czy obsługuje EF4 i VS2010? Zainstalowałem konektor i próbowałem dodać nowe połączenie w VS2010, ale MySQL nie pojawia się na liście dostawców
Abhijeet Patel

1
Ciekawi mnie MySQL, EF4 i VS2010.
Vinicius Rocha

1
Powinien, jeśli masz najnowsze złącze. Właśnie przeniosłem swój produkt na platformę .NET4 specjalnie ze względu na obsługę MySQL Entity. Narzędzia i wszystko działa dobrze, ale dużym problemem jest podstawowa obsługa rzeczywistych zapytań. Jest sporo problemów z wyrażeniami Lamba, których nie spotkasz w MSSQL
David Anderson

1
Oczywiście pojawiają się nowe wersje. Teraz obsługuje EF5, wersja 6.7.4: dev.mysql.com/downloads/connector/net/#downloads Ponadto, ponieważ ta wersja, wtyczka VS z serwerem MySQL i innymi narzędziami zawarta jest w jednym pakiecie: dev.mysql.com / tech-resources / artykuły /…
Nullius

22


7
Link nie działa
MüllerDK

2
Możesz przejść do artykułów z tym linkiem: pattersonc.com/blog/2009/04
Andy White

Czy używanie MYSQL z EF jest jeszcze lepsze, czy nadal występują problemy? Jeśli preferowany jest serwer SQL, czy ktoś może dokładnie wskazać, dlaczego serwer SQL jest lepszy tylko dlatego, że jest to ten sam dostawca Microsoft?
user3508811


7

Tu nie chodzi o stwardnienie rozsiane i czego oni chcą. Stworzyli * otwarty system dla innych, aby podłączyć „dostawców” - postgres i sqlite to mają - mysql jest po prostu laggin ... ale, dobra wiadomość dla zainteresowanych, ja też tego szukałem i odkryłem, że MySql Connector / Net 6.0 to będzie ... możesz to sprawdzić tutaj:

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


1
Zastanawiam się, co oznacza „początkowy”, kiedy powiedzieli „Wsparcie dla Entity Framework Entity”.
vintana

5

Będziesz potrzebował dostawcy mapowania dla MySQL. Jest to dodatkowa rzecz, której potrzebuje Entity Framework, aby magia się wydarzyła. Ten blog mówi o innych dostawcach map, oprócz tych dostarczanych przez Microsoft. Nie znalazłem żadnych wzmianek o MySQL.


Tak, masz rację. Miałem nadzieję, że jest teraz coś gotowego.
vintana

2

Vintana,

Oczywiście jest już coś gotowego. http://www.devart.com/products.html - chociaż jest komercyjny (masz 30-dniowy okres próbny IIRC). Tworzą żywe firmy zajmujące się pisaniem, więc myślę, że powinno być szybkie i stabilne. Wiem, że naprawdę duże firmy używają swojego dostawcy Oracle zamiast Orace i MS.


Dziękuję za odpowiedź. @Vintana, więcej informacji o dotConnect dla MySQL i jego zaletach można znaleźć tutaj devart.com/dotconnect/mysql . Aby usprawnić pracę z jednostkami Entity Framework, zapewniamy zaawansowane narzędzie do tworzenia modelu wizualnego - Entity Developer devart.com/entitydeveloper .
Devart,

1

Uważaj, używając łącznika .net, łącznik 6.6.5 ma błąd, nie działa on na wstawianie wartości tinyint jako tożsamości, na przykład:

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

jeśli spróbujesz wstawić taki obiekt:

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

Otrzymasz wyjątek Null Reference:

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

Do tej pory nie znalazłem rozwiązania, musiałem zmienić swoją tożsamość malutkiego na niepodpisaną tożsamość int, to rozwiązało problem, ale nie jest to właściwe rozwiązanie.

Jeśli używasz starszej wersji Connector.net (użyłem 6.4.4), nie będziesz miał tego problemu.

Jeśli ktoś wie o rozwiązaniu, proszę o kontakt.

Twoje zdrowie!

Oware


Błąd jest zgłaszany, ponieważ p ma wartość NULL. Najpierw musisz utworzyć nową pustą instancję obiektu. Tj. Osoba p = nowa osoba (); nie osoba p; Tak więc:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Dave

przepraszam, zapomniałem dodać nową linię, nawet jeśli dodam nową linię, błąd nadal się pojawia
dniu

Błąd został naprawiony w wersji 6.8.2. bugs.mysql.com/bug.php?id=70888 Connector / Net 6.8.3 został wydany. dev.mysql.com/downloads/connector/net
Der_Meister



0

Jeśli chcesz uruchomić Entity Framework z MySql na mono / linux / macos, może to być pomocne https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/


Czy używanie MYSQL z EF jest jeszcze lepsze, czy nadal występują problemy? Jeśli preferowany jest serwer SQL, czy ktoś może dokładnie wskazać, dlaczego serwer SQL jest lepszy tylko dlatego, że jest to ten sam dostawca Microsoft?
user3508811

Nie jestem pewien, jak to jest teraz, ale mieliśmy dość złe doświadczenia z powodu braku funkcji i ogólnej niespójności. MS MSQL jest zdecydowanie lepszy, ponieważ Microsoft stawia swój własny stos na pierwszym miejscu.
Igor Yalovoy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.