Статьи

Начало работы MySQL с Entity Framework 4.0

MySQL работает с Entity Framework 4.0? Ответ: да, это работает! Я просто разработал один экспериментальный проект, чтобы поиграть с MySQL и Entity Framework 4.0, и в этой публикации я покажу вам, как передавать данные MySQL в EF. Также я дам несколько советов, как развернуть ваши приложения на хостинге и в облачных средах.

MySQL материал

Как вы можете догадаться, вам нужен MySQL где-нибудь. У меня установлен MySQL на мою машину для разработки, так что я также могу разрабатывать вещи, когда я не в сети. Другая вещь, которая вам нужна, — MySQL, Connector для .NET Framework. В настоящее время доступна версия для разработки MySQL Connector / NET 6.3.5, которая поддерживает Visual Studio 2010.

Прежде чем начать загрузку MySQL и Connector / NET:

Если вы не большой поклонник phpMyAdmin, то вы можете попробовать бесплатный настольный клиент для MySQL — HeidiSQL . Я использую его, и я действительно доволен этой программой.

NB! Если вы просто установите MySQL, то создайте базу данных с несколькими таблицами. Чтобы использовать все возможности Entity Framework 4.0, я предлагаю вам использовать InnoDB или другой движок, который поддерживает внешние ключи.

Подключение MySQL к Entity Framework 4.0

Теперь создайте простой консольный проект с использованием Visual Studio 2010 и выполните следующие шаги.

1. Добавьте новую модель данных объекта ADO.NET в ваш проект.

Для модели введите название, которое является информативным и которое вы сможете позже распознать.

Добавление ADO.NET Entity Data Model

Теперь вы можете выбрать, как вы хотите создать свою модель. Выберите «Создать из базы данных» и нажмите «ОК».

Выбор источника содержимого модели

2. Настройте соединение с базой данных

Измените подключение данных и выберите MySQL Database в качестве источника данных. Вам также может понадобиться установить провайдера — есть только один выбор. Выберите его, если в списке поставщиков данных отображается пустое значение.

Изменение источника данных

Нажмите OK и введите информацию о соединении, о которой вас спрашивают. Не забудьте нажать кнопку «Проверить подключение», чтобы убедиться, что с данными вашего подключения все в порядке.

Настройка свойств подключения

Если все работает, нажмите ОК.

3. Вставьте имя контекста

Теперь вы должны увидеть следующий диалог. Вставьте название вашей модели данных в файл конфигурации приложения и нажмите OK.

Настройки подключения к данным

Нажмите следующую кнопку.

4. Выберите таблицы для модели

Теперь вы можете выбирать таблицы и представления, на которых основаны ваши классы. У меня есть небольшая база данных с данными о событиях. Снимите флажок «Включить столбцы внешнего ключа в модель» — это чертовски неприятно, когда вы отдаляете их от модели позже. Также вставьте информативное и легко запоминающееся название для вашей модели.

Выберите таблицы для модели

Нажмите кнопку Готово.

5. Определите ваши классы

Теперь пришло время определить ваши классы. Здесь вы можете увидеть, что Entity Framework сгенерировал для вас. Отношения были обнаружены автоматически — поэтому нам были нужны внешние ключи. Имена классов и их участников пока не хороши.

Автоматически созданные классы

После некоторых модификаций модель моего класса выглядит следующим образом. Обратите внимание, что я удалил свойство навигации посетителей из класса персонажа.

Финальная версия занятий

Теперь мои классы выглядят хорошо, и они следуют соглашениям, которые я использую при именовании классов и их членов.

NB! Не забудьте просмотреть свойства классов (окна свойств) и изменить их имена наборов, если имена наборов содержат числа (я изменил имя набора для Entity с Entity1 на Entities).

6. Давайте проверим!

Теперь давайте напишем простую программу тестирования, чтобы увидеть, проходят ли данные MySQL через Entity Framework 4.0, как и ожидалось. Моя программа ищет события, на которых я присутствовал.


using(var context = new MySqlEntities())
{
    var myEvents = from e in context.Events
                    from a in e.Attendees
                    where a.Person.FirstName == "Gunnar" &&
                            a.Person.LastName == "Peipman"
                    select e;
 
    Console.WriteLine("My events: ");
 
    foreach(var e in myEvents)
    {
        Console.WriteLine(e.Title);
    }
}
 
Console.ReadKey();

Тест MySQL Entity Framework прошел успешноИ когда я запускаю его, я получаю результат, показанный на скриншоте справа. Я проверил из базы данных, и эти результаты верны.

При первом запуске разъем работает медленно, но это только эффект первого запуска. Поскольку соединитель загружается в память Entity Framework, он быстро работает с этого момента.

Теперь давайте посмотрим, что нам нужно сделать, чтобы наша программа работала в хостинге и облачных средах, где MySQL-коннектор не установлен.

Развертывание приложения на хостинге и в облачных средах

Если на вашем хостинге или в облачной среде не установлен коннектор MySQL, вы должны предоставить сборки коннектора MySQL вместе с вашим проектом. Добавьте следующие сборки в папку bin вашего проекта и включите их в свой проект (в противном случае они не упакованы инструментами WebDeploy и Azure):

  • MySQL.Data
  • MySQL.Data.Entity
  • MySQL.Web

Вы также можете добавить ссылки на эти сборки и пометить ссылки как локальные, чтобы эти сборки были скопированы в двоичную папку вашего приложения. Если у вас есть ссылки на эти сборки, вам не нужно включать их в свой проект из папки bin.

Также добавьте следующий блок в файл конфигурации вашего приложения.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
<system.data>
<DbProviderFactories>
<add
name=”MySQL Data Provider”
invariant=”MySql.Data.MySqlClient”
description=”.Net Framework Data Provider for MySQL”
type=”MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data,
Version=6.2.0.0, Culture=neutral,
PublicKeyToken=c5687fc88969c44d”
/>
</DbProviderFactories>
</system.data>
...
</configuration>

Вывод

Было нетрудно установить MySQL коннектор и подключить MySQL к Entity Framework 4.0. Чтобы использовать всю мощь Entity Framework, мы использовали движок InnoDB, потому что он поддерживает внешние ключи. Также было легко запросить нашу модель. Чтобы запустить наш проект онлайн, нам потребовалось несколько простых изменений нашего проекта и файлов конфигурации.