Использование MySQL с Entity Framework [закрыто]

269

Не могу найти что-либо релевантное о Entity Framework / MySQL в Google, поэтому я надеюсь, что кто-то знает об этом.

vintana
источник
8
откровенно говоря, поддержка mysql для LINQ - это дерьмо! Я бьюсь головой о мелких проблемах за последнюю неделю: | ...
effkay
1
Вы использовали dblinq code.google.com/p/dblinq2007 ?
Шарик

Ответы:

193

Это было выпущено - Получите соединитель MySQL для .Net v6.5 - это имеет поддержку [Entity Framework]

Я ждал этого все время, хотя поддержка является базовой, работает для большинства базовых сценариев взаимодействия с БД. Он также имеет базовую интеграцию Visual Studio.

ОБНОВЛЕНИЕ http://dev.mysql.com/downloads/connector/net/ Начиная с версии 6.7, Connector / Net больше не будет включать интеграцию MySQL для Visual Studio. Эта функциональность теперь доступна в отдельном продукте MySQL для Visual Studio, доступном с помощью установщика MySQL для Windows (см. Http://dev.mysql.com/tech-resources/articles/mysql-installer-for-windows.html ).

Vin
источник
4
Я думал, что упомяну, что последняя версия доступна здесь (текущая 6.2.2): mysql.com/downloads/connector/net
Бретт Райан
3
Это поддерживает EF4 и VS2010? Я установил соединитель и попытался добавить новое соединение в VS2010, но MySQL не отображается в списке поставщиков
Abhijeet Patel
1
Мне любопытно, MySQL, EF4 и VS2010.
Виниций Роча
1
Должен, если у вас последний разъем. Я просто переместил свой продукт в .NET4 специально из-за поддержки MySQL Entity. Инструменты и все работают хорошо, но большая проблема заключается в поддержке, которую они обеспечивают для реальных запросов. С выражениями lamba довольно много проблем, с которыми вы не сталкиваетесь с MSSQL
Дэвид Андерсон,
1
Конечно, выходят новые версии. Теперь поддерживается EF5, версия 6.7.4: dev.mysql.com/downloads/connector/net/#downloads Кроме того, начиная с этой версии, плагин VS с MySQL-сервером и другими включенными инструментами входит в один пакет: dev.mysql.com / tech-resources / статьи /…
Нуллий
22

Проверьте мой пост на эту тему.

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

pattersonc
источник
Я исправил кодировку этой ссылки - теперь пользователи могут щелкнуть прямо, а не копировать / вставлять или выбирать /
переходить
7
Ссылка не работает
MüllerDK
2
Вы можете получить к статьям с этой ссылкой: pattersonc.com/blog/2009/04
Энди Уайт
Использование MYSQL с EF улучшилось или все еще есть проблемы? Если SQL-сервер предпочтителен, может ли кто-нибудь точно определить, почему SQL-сервер предпочтителен только потому, что тот же поставщик Microsoft?
user3508811
7

Дело не в РС, а в том, что они хотят. Они создали * открытую систему для других, чтобы подключить «провайдеров» - у postgres и sqlite - mysql - это просто лаг ... но, хорошая новость для заинтересованных, я тоже искал это и обнаружил, что MySql Connector / Net 6.0 будет иметь это ... вы можете проверить это здесь:

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


источник
1
Интересно, что означает «начальный», когда они сказали «Начальная поддержка Entity Framework».
Винтана
5

Вам потребуется картографический поставщик для MySQL. Это дополнительная вещь, необходимая Entity Framework для того, чтобы волшебство произошло. Этот блог рассказывает о других картографических провайдерах, помимо того, который поставляет Microsoft. Я не нашел никаких упоминаний о MySQL.

Ларс Труйенс
источник
Да, ты прав. Я надеялся, что сейчас что-то готово.
Винтана
2

Vintana,

Конечно, сейчас кое-что готово. http://www.devart.com/products.html - хотя он и коммерческий (у вас есть 30-дневная пробная версия IIRC). Они зарабатывают на жизнь написанием провайдеров, поэтому я думаю, это должно быть быстро и стабильно. Я знаю действительно большие компании, использующие своего провайдера Oracle вместо Orace и MS.

aaimnr
источник
Благодарю за ваш ответ. @Vintana, вы можете найти больше информации о dotConnect для MySQL и его преимуществах здесь devart.com/dotconnect/mysql . Чтобы улучшить вашу работу с объектами Entity Framework, мы предоставляем усовершенствованный инструмент для создания визуальных моделей - Entity Developer devart.com/entitydeveloper .
Devart
1

Будьте осторожны при использовании соединителя .net, в соединителе 6.6.5 есть ошибка, она не работает для вставки значений tinyint в качестве идентификатора, например:

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

если вы попытаетесь вставить объект, как это:

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

Вы получите исключение нулевой ссылки:

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

До сих пор я не нашел решения, мне приходилось менять свою идентификацию tinyint на unsigned int identity, это решало проблему, но это не правильное решение.

Если вы используете более старую версию Connector.net (я использовал 6.4.4), у вас не будет этой проблемы.

Если кто-то знает о решении, пожалуйста, свяжитесь со мной.

Ура!

Oware

Oware
источник
Ошибка генерируется, потому что p равно нулю. Вы должны сначала создать новый пустой экземпляр объекта. Т.е. Person p = new Person (); не человек р; Итак:Person p = new Person(){Name = "Oware"}; context.Person.Add(p); context.SaveChanges();
Дейв
извините, я забыл добавить новую строку, даже если я добавляю новую строку, ошибка все еще появляется
oware
Ошибка исправлена ​​в версии 6.8.2. bugs.mysql.com/bug.php?id=70888 Connector / Net 6.8.3 выпущен. dev.mysql.com/downloads/connector/net
Der_Meister
0

Если вы заинтересованы в запуске Entity Framework с MySql на mono / linux / macos, это может быть полезно https://iyalovoi.wordpress.com/2015/04/06/entity-framework-with-mysql-on-mac-os/

Игорь Яловой
источник
Использование MYSQL с EF улучшилось или все еще есть проблемы? Если SQL-сервер предпочтителен, может ли кто-нибудь точно определить, почему SQL-сервер предпочтителен только потому, что тот же поставщик Microsoft?
user3508811
Я не уверен, как это сейчас, но у нас был довольно плохой опыт из-за отсутствия функций, и это в целом противоречиво. MS MSQL определенно предпочтительнее, потому что Microsoft ставит свой собственный стек первым.
Игорь Яловой