Використання MySQL з Entity Framework [закрито]


269

Не можу знайти щось релевантне про Entity Framework / MySQL в Google, тому я сподіваюся, що хтось про це знає.


8
відверто кажучи, підтримка mysql для LINQ - це лайно! Я останній тиждень стукаю головою про незначні питання: | ...
effkay

1
ти використовував dblinq code.google.com/p/dblinq2007 ?
Шарік

Відповіді:


193

Випущено - Отримайте роз'єм MySQL для .Net v6.5 - у ньому є підтримка [Entity Framework]

Я чекав цього весь час, хоча підтримка є базовою, працює для більшості базових сценаріїв взаємодії db. Він також має базову інтеграцію Visual Studio.

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


4
Я думав зазначити, що остання версія доступна тут (поточна 6.2.2): mysql.com/downloads/connector/net
Brett Ryan

3
Чи підтримує це EF4 та VS2010? Я встановив роз'єм і спробував додати нове з'єднання у VS2010, але MySQL не відображається у списку провайдерів
Abhijeet Patel

1
Мені цікаво MySQL, EF4 та VS2010.
Vinicius Rocha

1
Це має бути, якщо у вас останній роз'єм. Я просто перемістив свій продукт на .NET4 спеціально через підтримку MySQL Entity. Інструменти та все працюють нормально, але головним питанням є основна підтримка, яку він надає для фактичного запиту. Існує досить багато проблем з виразами lamba, з якими ви не стикаєтесь з MSSQL
David Anderson

1
Звичайно, виходять нові версії. Тепер підтримується EF5, версія 6.7.4: dev.mysql.com/downloads/connector/net/#downloads Також, оскільки ця версія плагін VS з сервером MySQL та іншими інструментами, що входять в комплект, входить в один пакет: dev.mysql.com / тех-ресурси / статті /…
Нуллій

22

Ознайомтеся з моєю публікацією на цю тему.

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


Я виправив кодування цього посилання - тепер користувачі можуть клацнути правою кнопкою миші, а не копіювати / вставляти або вибирати / goto
kͩeͣmͮpͥ ͥ

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
Цікаво, що означає "початковий", коли вони сказали "Підтримка початкової сутності".
вінтана

5

Вам знадобиться постачальник карт для MySQL. Це зайва річ, яка потрібна Entity Framework, щоб здійснити магію. Цей блог розповідає про інших постачальників карт, крім того, що постачає Microsoft. Я не знайшов жодної згадки про MySQL.


Так, ти маєш рацію. Я сподівався, що зараз щось готове.
вінтана

2

Вінтана,

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


Спасибі за вашу відповідь. @Vintana, ви можете знайти більше інформації про dotConnect для MySQL та його переваги тут devart.com/dotconnect/mysql . Для вдосконалення роботи з суб'єктами Entity Framework ми надаємо вдосконалений інструмент для створення візуальної моделі - Entity Developer devart.com/entitydeveloper .
Devart

1

Будьте обережні, використовуючи connector .net, Connector 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()

До цих пір я не знайшов рішення, мені довелося змінити свою крихітну ідентичність на непідписану int ідентичність, це вирішило проблему, але це не правильне рішення.

Якщо ви використовуєте старішу версію Connector.net (я використовував 6.4.4), у вас не виникне цієї проблеми.

Якщо хтось знає про рішення, зв'яжіться зі мною.

Ура!

Обізнаний


Помилка закидається, тому що p є нульовим. Спочатку потрібно створити новий порожній екземпляр об'єкта. Т.е. особа p = нова особа (); не особа р; Отже: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 ставить власний стек на перше місце.
Ігор Яловий
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.