Andrey on .NET | Вышла Entity Framework 4.3

Вышла Entity Framework 4.3

Доступна для загрузки финальная версия Entity Framework 4.3.

Что нового?

Основные нововведения, относительно Entity Framework 4.2, включают в себя:

  • Новый инструмент – Code First Migrations. Он предназначен для изменения схемы базы данных вслед за модификациями Модели. Возможны два способа миграций:
    • автоматическая (automatic) – Entity Framework самостоятельно попытается найти и внести изменения в таблицы;
    • программная (code-base) – разработчик описывает модификации Модели в специальных классах, которые Entity Framework использует для корректировки схемы базы данных.
  • Отказ от служебной таблицы EdmMetadata.
  • Исправлен метод GetDatabaseValues(), который теперь позволяет размещать классы сущности и контекста в различных пространствах имен.
  • Добавлена поддержка юникодных имен DbSet.
  • Введена поддержка Data Annotations для internal, protected и private свойств. При этом необходимо вручную добавить их в Модель с помощью Fluent API.
  • Увеличено число настроек, задаваемых в конфигурационном файле (Web.config или App.config): фабрика соединений, инициализатор баз данных, включая параметры для создания этих объектов и т.д. Подробности доступны в блоге разработчиков Entity Framework.

Основные отличия от Entity Framework 4.3 beta 1:

  • Если база данных уже существует, то создается код для программой (code-based) миграции. При необходимости можно отменить такое поведение, указав параметр -EnableAutomaticMigrations.
  • Введена новая константа $InitialDatabase, обозначающая исходное состояние базы данных. Например, если необходимо вернуться к исходному состоянию, то можно использовать команду: Update-Database -TargetMigration:$InitialDatabase
  • Утилита командной строки для выполнения миграции переименована из Update-Database.exe в migrate.exe.
  • При создании установочного пакета NuGet файл migrate.exe может быть размещен в папке Tools. Но при обращении к нему необходимо передать путь до сборки проекта в параметре /StartUpDirectory. Например: migrate.exe MyAssembly /StartUpDirectory:C:\MyProject\bin\debug
  • Исправлена ошибка, возникавшая в некоторых случаях при использовании Package Manager Console для вызова команд миграции.
  • Устранена ситуация, когда использование параметра –Script приводило к ошибке. Это проявлялось в бета версии, если миграция начиналась не с пустой базы данных.

Как загрузить новую версию?

Entity Framework 4.3 доступна для установки в проект через NuGet. Имя установочного пакета не изменилось: EntityFramework. Команды NuGet:

  • для установки: Install-Package EntityFramework
  • для обновления с предыдущих версий: Update-Package EntityFramework

Если было произведено обновления, то необходимо перезапустить Visual Studio. Это нужно для обновления сборки с командами миграции.

Дополнительные материалы (на английском)

Приведенные ниже две статьи описывают принципы различных подходов (Code / Model  / Database First), которые доступны при использовании Entity Framework:

Кроме того, опубликованы материалы, в которых подробно рассмотрены возможности как автоматической (automatic), так и программной (code-based) миграции данных:

А что дальше?

Разработчики обещают, что в Entity Framework 5.0 наконец-то появится долгожданная поддержка enum. Кроме того, будут доступны пространственные типы данных (spatial data types) и улучшена производительность.

Задержка с появлением указанных возможностей в текущей версии вызвана необходимостью обновления сборок, которые входят в состав .NET Framework. Это можно будет сделать только с выходом .NET Framework 4.5. Поэтому сразу после появления её следующей предварительной версии будет доступна и Entity Framework 5.0 beta 1. Ждать остается не так и долго.

Поддержка

Вопросы, касающиеся текущей версии Entity Framework, можно задать на официальном форуме: ADO.NET Entity Framework.

Комментарии (8) -

Можете объяснить чем автоматическая миграция отличается от программной? Из статей не очень понятно.
Спасибо.

При автоматической миграции EF пытается самостоятельно найти изменения в Модели и привести таблицы к новому виду.

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

Добавил пояснение в новость.

Спасибо

А что слышно про поддержку хранимых процедур в Code First? Ее принципиально не будет? Или, все таки, в ближайших выпусках добавят?

Андрей, не подскажите, а как на продакшине накатываются изменения? У меня всё ок, только после выполнения команды Update, но хочется же автоматизма Smile

@ SergPn: Вроде как планы есть, но когда будет информации не находил.

@ ShurikEv: Автоматизм в смысле что при запуске новой версии на рабочем сервере сразу обновление схемы БД? Думаю это лишнее.

Есть вообще такая возможность: выложил код на сервер, там проверяется какая версия апдейта установлена и есть ли новая версия, если есть то она сразу накатывается?
Или только ручками придется обновлять схему БД?

@ AK: Вызывать при старте веб-приложения:
var migrator = new DbMigrator(new Configuration());
migrator.Update();

Добавить комментарий