При попытке создать эшафот с ядром asp.net эта команда
scaffold-dbcontext "Источник данных = (локальный); Начальный каталог = MyDb; Интегрированная безопасность = True;" Microsoft.EntityFrameworkCore.sqlserver -outputdir Models
Выдает эту ошибку.
scaffold-dbcontext: термин 'scaffold-dbcontext' не распознается как имя командлета, функции, файла сценария или работающей программы. Проверьте написание имени или, если был включен путь, проверьте правильность пути и повторите попытку. В строке: 1 символ: 1 + scaffold-dbcontext "Data Source = (local); Initial Catalog = MyDB; In ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException
Я попытался решение здесь , но это не работает для меня.
Есть идеи, в чем может быть причина / лекарство?
источник
Ответы:
Для меня, по-видимому, это сработало, когда я также запустил консоль диспетчера пакетов:
Install-Package Microsoft.EntityFrameworkCore.Tools
Также убедитесь:
Чтобы иметь ссылки на другие зависимости (например, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) в зависимости от ваших потребностей.
Чтобы выбрать правильную сборку в качестве цели для ваших команд в правом верхнем углу консоли PM (меня часто обманывают, забывая об этом ...)
Еще одна проблема, с которой я столкнулся: когда dbcontext находился в отдельной библиотеке классов, я обнаружил следующую ошибку:
Что я смог исправить, установив свою библиотеку классов как проект запуска в VS (не спрашивайте, почему, это кажется бессмысленным, но это сработало).
Позднее редактирование, есть кое-что еще: вы не можете запустить Scaffold-DbContext для библиотеки классов, ориентированной только на .Net Standard, вы также должны включить в ней netcoreapp, иначе Scaffold-DbContext будет жаловаться. Для поддержки обеих целей отредактируйте csproj, указав:
<TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks>
Вместо<TargetFramework>
section.После всего этого вы сможете запустить свою
Scaffold-DbContext
командную строку с правильными аргументами и строкой подключения.источник
это все, что будет работать
источник
Убедитесь, что вы запускаете VS от имени администратора и установили следующие пакеты:
источник
Была такая же проблема. В моем случае мне не хватало некоторых зависимостей, поэтому убедитесь, что у вас есть следующие:
Надеюсь, это поможет. :)
источник
Если вы используете .NetCore 2.2, приведенная ниже команда работает для меня как шарм в командной строке или Git Bash. Перед запуском команды убедитесь, что вы находитесь прямо в папке проекта.
Например, C: \ App \ ProjectName:
dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model
источник
Я установил Microsoft.EntityFrameworkCore.Tools из диспетчера пакетов NuGet, и он был виден в установленных пакетах. Но я продолжал получать эту ошибку.
Перезапуск Visual Studio (2019 / версия 16.4.4) исправил это для меня.
источник
Scaffold
Команда является частьюdbcontext
команды в EF. Ниже приведены подробные сведения об успехеscaffold
:Требуются ссылки на пакеты:
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.0.0"/> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.0.0"/> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.0.0"/> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.0.0"/>
Итак, наша команда scaffold должна выглядеть так:
dotnet ef dbcontext scaffold "Server=localhost\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory
Ваше
Server
значение может отличаться в зависимости от имени вашего сервера Db. ЗаменитеMyDatabase
имя своей базы данных, например,master
иOutputDirectory
на место, где вы хотите, чтобы ваши недавно созданные классы шаблонов, например,Models
папка.источник
Убедитесь, что вы используете правильную консоль, «Консоль диспетчера пакетов». Существует также консоль «Терминал», которая очень похожа, но не работает для этой команды. Консоль диспетчера пакетов находится в меню «Просмотр» -> «Другие окна» (начиная с Visual Studio 2019, версия 16.6.5).
источник
Недавно я столкнулся с другой причиной этой ошибки: сам NuGet устарел.
Обновление NuGet устранило проблему.
Если ответ Деванатана вам не подходит, убедитесь, что сам NuGet обновлен.
источник
Для меня ... при копировании вставки команды из microsoft docs по какой-то причине был добавлен дополнительный интервал вокруг дефисов.
Устранение дефиса:
неправильно:
Scaffold - DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models
хороший:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
В документации также говорится, что если вы получите эту ошибку, попробуйте перезапустить Visual Studio.
https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db
источник