Как включить миграцию (EF6) в проекте asp.net 5?

Я создал новый проект библиотеки классов (пакет) (до VS 2015 RC использовал еще худшее имя библиотеки классов asp.net для представления слоя данных. Чтобы быть ясным, это новая структура стиля kproj.

Добавлен EF 6.1.3 в project.json. В настоящее время только таргетинг на DNX451.

   "dependencies": {
        "EntityFramework": "6.1.3"
        ,"Moq": "4.2.1502.911"
    },

Созданные начальные классы моделей и использование инициализатора базы данных AlwaysCreate все работает нормально. Теперь вам нужно переключиться на миграции, поэтому использовалась Enable-Migrations в консоли диспетчера пакетов и получила:

Enable-Migrations : The term 'Enable-Migrations' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ Enable-Migrations
+ ~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Enable-Migrations:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Для переноса EF7 менеджер пакетов не поддерживается для команд миграции. Вместо этого есть новая команда ef, запускаемая через dnu, но этот новый процесс только для EF7 не EF6 правильно?

Почему диспетчер пакетов думает, что Enable-Migrations недействителен, хотя EF6 ссылается?

Ответ 1

EDIT для 1.0.0: Migrator.EF6 теперь поддерживает 1.0.0.


EDIT для RC2: Migrator.EF6 теперь поддерживает RC2.


Нам нужен инструмент командной строки dnx, который обертывает EF6 и делегирует ему команды. Это потому, что проекты DNX не будут видеть init.ps1 и install.ps1, которые необходимы для работы Add-Migration (по крайней мере, на данный момент см. this).

Реализация не так уж трудна, но никто, кажется, не дал ей времени, поэтому я закончил делать это.

Это решение не требует отдельного .csproj, происходит тот же рабочий процесс, но вместо Update-Database вы будете делать dnx ef database update и подобные команды.

Инструкции и образцы можно найти здесь: Migrator.EF6.

Позже, возможно, в RTM, вы сможете использовать их и в проектах DNX. Вероятно, именно поэтому Microsoft не помогла EF6 в миграции.

Ответ 2

Почему диспетчер пакетов думает, что Enable-Migrations недействителен, хотя EF6 ссылается?

Потому что я предполагаю и совершенно уверен, что проекты ASP.NET 5 не вызывают установку и удаление скриптов PowerShell внутри пакетов, в которые пакет EF 6 должен добавить команды миграции в консоль диспетчера пакетов. Лучше всего попытаться интегрировать инструмент командной строки (я считаю, что он называется migrate.exe, не уверен) внутри пакета Eu6 NuGet.

Ответ 3

Мне удалось обойти это, создав старый проект .csproj, который работает команда Enable-Migrations. Единственное отличие состоит в том, что вместо отдельной копии файлов я добавил их по ссылке, используя опцию "Добавить по ссылке" при добавлении существующего файла.

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