Как я могу выполнить проект Entity Framework Core и добавить миграцию в Visual Studio 2015 из приглашения nuget?

В Visual Studio 2015 я создал проект ASP.net Core (ранее называвшийся ASP.NET 5). Шаблон для проекта создает локальную базу данных MS SQL для постоянства вместе с инфраструктурой сущностей и некоторыми таблицами аутентификации.

После того, как я понял, как просматривать базу данных localdb, созданную для этого проекта, я решил попробовать изменить объект модели и выполнить первую миграцию кода с помощью образца приложения-шаблона веб-сайта ASP.NET MVC. Он использует EF для обеспечения сохранения входа в локальную базу данных. Я попытался использовать

Демонстрационное приложение уже включает папку Migrations. Но если вы наберете add-migration SomeNameHere в консоли диспетчера пакетов или enable-migrations, кажется, что невозможно работать с миграциями ER с примерами проектов.

Я добавил строковое свойство в модуль IdentityModel.cs и попытался вручную добавить его вручную в файл 0000...IdentitySchema.cs, но, очевидно, я не знаю, как это сделать правильно, так как при запуске приложения я получил некоторые ошибки, показанные ниже. Я считаю, что в основном мне нужно, чтобы инструмент Entity Framework code-first сгенерировал некоторый скелет модуля .cs, который будет помещен в папку Migrations.

Обычные вещи, которые люди предлагают делать сейчас, это:

  • Убедитесь, что вы запускали от имени администратора. (Готово)
  • Убедитесь, что вы удалили Entity Framework и переустановили его в решение, в котором вы хотите его активировать (Готово)

Переустановка выглядела так из консоли менеджера пакетов:

PM> Uninstall-Package EntityFramework
Uninstalling NuGet package EntityFramework.7.0.0-beta4.
Successfully uninstalled 'EntityFramework.7.0.0-beta4' from WebApplicationDNX.
PM> Install-Package EntityFramework -IncludePrerelease
Installing NuGet package EntityFramework.7.0.0-beta4.
Successfully installed 'EntityFramework.7.0.0-beta4' to WebApplicationDNX.
PM> 

Здесь я считаю, что совершаю ошибку, потому что пытаюсь запустить команду, например add-migration, и не могу этого сделать. Оказывается, это никогда не поддерживалось для меня, чтобы попробовать такие вещи:

PM> add-migration DummyMigrate
add-migration : The term 'add-migration' is not recognized as the name of a cmdlet, function, script file, or operable program. .... 
PM> enable-migration
enable-migration : The term 'enable-migration' is not recognized as the name of a cmdlet, function, script file, or operable program. 
...

Можно ли заставить миграцию сущности работать из Visual Studio 2015 из приложения на основе шаблона ASP.NET 5 Preview Templates -> Web Site?

(обновления с 1 по 4 удалены как бесполезные исторические бета-версии)

Обновление 5: в asp.net core 1.0.0-RC2 инструмент dnx был удален, заменен dotnet, но основной принцип, согласно которому команду dotnet ef должен запускать из исходного каталога проекта, а не из вашего Solution, и для этого вам, вероятно, следует использовать внешнюю командную строку или инструменты PowerShell для Visual Studio, а не приглашение командной строки nuget.

   solution-dir           project-source-dir
         |                       |
d:\dev\AspNetCoreWebAp\src\AspNetCoreWebAp>dotnet ef
Project AspNetCoreWebAp (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing
Compiling AspNetCoreWebAp for .NETCoreApp,Version=v1.0
Compilation succeeded.
    0 Warning(s)
    0 Error(s)
Time elapsed 00:00:03.0846647

                     _/\__
               ---==/    \\
         ___  ___   |.    \|\
        | __|| __|  |  )   \\\
        | _| | _|   \_/ |  //|\\
        |___||_|       /   \\\/\\
Entity Framework .NET Core CLI Commands 1.0.0-preview1-20901
Usage: dotnet ef [options] [command]

введите здесь описание изображения


person Warren P    schedule 15.06.2015    source источник
comment
Источник документации EF7 найден на Github: github.com/ aspnet/EntityFramework/вики/   -  person Warren P    schedule 15.06.2015


Ответы (2)


Вы пропустили шаг. Из документации в то время, когда была активна ваша бета-версия 8, недостающая команда была бы:

Install-Package EntityFramework.Commands -Pre, чтобы сделать команды миграции доступными в вашем проекте.

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

Answer-Update-contributed-by-Warren: В Asp.net core 1.0.0-RC2 соответствующий пакет называется Microsoft.EntityFrameworkCore.Tools, и он, по-видимому, является частью шаблона веб-приложения ASP.Net Core, что делает исходную проблему маловероятной, если только кто-то на самом деле повреждает свой project.json. Команды миграции «EF» из командной строки не следует запускать из консоли диспетчера пакетов, которая НЕ является общей средой для команд DOTNET.

person Community    schedule 15.06.2015
comment
Теперь работает в версии Visual Studio 2015. - person Warren P; 24.07.2015
comment
@Claies, у меня не работает версия сообщества Visual Studio 2015. Моя версия EntityFramework — 6.1.3, а версия EntityFramework.Commands — (7.0.0-rc1-final). - person Don; 28.12.2015
comment
Этот ответ больше не работает в EF7, в Visual Studio 2015, обновление 1. Мне нужно перейти в командную строку и выполнить dnx ef migration.... команды из командной строки. - person Warren P; 12.02.2016
comment
Как сказал Уоррен П., это больше не работает с EF7 в обновлении 1 VS 2015. Я использовал команды dnx и следил за этой статьей bricelam.net/2014/09/14/migrations-on-k.html - person Krishna Teja Veeramachaneni; 26.02.2016
comment
Не используйте консоль диспетчера пакетов для запуска команд миграции EF. - person Warren P; 06.06.2016
comment
@WarrenP, так что же нам теперь использовать для запуска команд миграции EF? Является ли открытие подсказки отдельно от визуальной студии единственным способом сейчас? - person Justin T Conroy; 10.06.2016
comment
Есть хороший инструмент powershell для vs, который также работает, если вы хотите сделать это в vs - person Warren P; 10.06.2016

Следующее применимо только к dnx, который был частью ASP.NET Core RC1. Это было заменено и не является применимой частью ASP.NET Core.

Отвечая на ваши вопросы о том, как лучше всего запустить команду dnx:

Моя команда dnx также выдавала ошибку.

Термин «dnx» не распознается как имя командлета, функции,

как в моей консоли диспетчера пакетов Visual Studio, так и в Windows PowerShell.

После долгих разочарований я смог решить эту проблему.

Вот шаги, которые я сделал, чтобы заставить его работать

  • Закройте все экземпляры Visual Studio
  • Удалите папку .dnx в C:\Users\ИМЯ ПОЛЬЗОВАТЕЛЯ\.dnx. У меня было больше 1 Гб
  • Откройте Visual Studio 2015. Создайте новый шаблон веб-приложения ASP.NET 5 по умолчанию. Создайте и запустите его. Это позволит воссоздать папку .dnx. После этого размер папки стал почти 600 МБ.
  • Откройте PowerShell
  • Перейдите в каталог .dnx bin

    cd\
    cd users\YOURUSERNAME\.dnx\bin
    
  • Запустите команду

    .\dnvm upgrade
    

    Если вы получаете сообщение об ошибке «Выполнение сценариев отключено в этой системе». затем выполните следующую команду, чтобы сначала дать вам разрешение

    Set-ExecutionPolicy RemoteSigned
    

Откройте Visual Studio. Затем вы сможете ввести команду dnx как в консоли диспетчера пакетов, так и в powershell.

   dnx

и он узнает его

введите здесь описание изображения

person devfric    schedule 21.10.2015
comment
Спасибо. Я выполнил те же шаги, и теперь я могу запустить команду DNX. - person Kalpesh Satasiya; 20.02.2016
comment
Работал и для меня! - person Rahatur; 11.04.2016
comment
Полностью исправляет эту проблему, я подозреваю, что с последующими выпусками все эти обручи, через которые нам приходится прыгать, будут уменьшены, но тем временем точно следуйте инструкциям в этом посте, и вы сможете создать свою миграцию :) Спасибо! - person c0d3p03t; 16.04.2016
comment
Это должен быть принятый ответ. Сработало для меня, спасибо - person Craig Bruce; 02.05.2016
comment
Нет, потому что теперь вы должны использовать dotnet в rc2, а не в dnx. - person Warren P; 10.06.2016
comment
Это не сработало для меня. Создание нового веб-приложения не привело к воссозданию папки .dnx. Я восстановил папку .dnx и запустил апгрейд, который добавил бины в переменные PATH, но команда по-прежнему недоступна нигде, кроме как в самой папке .dnx. - person Dr. C. Hilarius; 21.09.2016