Термин 'scaffold-dbcontext' не распознается как имя командлета, функции, файла сценария или работающей программы.


88

При попытке создать эшафот с ядром 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

Я попытался решение здесь , но это не работает для меня.

Есть идеи, в чем может быть причина / лекарство?


Убедитесь, что entityframework.tools находится в разделе инструментов вашего project.json.
Тим Скрив

Ответы:


216

Для меня, по-видимому, это сработало, когда я также запустил консоль диспетчера пакетов:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Также убедитесь:

  • Чтобы иметь ссылки на другие зависимости (например, Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) в зависимости от ваших потребностей.

  • Чтобы выбрать правильную сборку в качестве цели для ваших команд в правом верхнем углу консоли PM (меня часто обманывают, забывая об этом ...)

Еще одна проблема, с которой я столкнулся: когда dbcontext находился в отдельной библиотеке классов, я обнаружил следующую ошибку:

Не удалось найти сборку поставщика с именем Microsoft.EntityFrameworkCore.SqlServer. Убедитесь, что указанное имя правильное и на него ссылается проект.

Что я смог исправить, установив свою библиотеку классов как проект запуска в VS (не спрашивайте, почему, это кажется бессмысленным, но это сработало).

Позднее редактирование, есть кое-что еще: вы не можете запустить Scaffold-DbContext для библиотеки классов, ориентированной только на .Net Standard, вы также должны включить в ней netcoreapp, иначе Scaffold-DbContext будет жаловаться. Для поддержки обеих целей отредактируйте csproj, указав: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Вместо <TargetFramework>section.

После всего этого вы сможете запустить свою Scaffold-DbContextкомандную строку с правильными аргументами и строкой подключения.


2
Спасибо за это. Ваше решение по-прежнему работает для VS2019 с использованием .net core 2.2
PaulC

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

Я столкнулся с ошибкой: не удалось найти сборку провайдера с именем Microsoft.EntityFrameworkCore.SqlServer. Убедитесь, что указанное имя правильное и на него ссылается проект. Мне также пришлось запустить: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ахмед Файзан

@AhmedFaizan на самом деле является одним из примеров пакетов, упомянутых в сообщении. Рад, что это было полезно
AFract

1
Требуется NET Core 3.1, но не официальной документацией mysql, он должен быть установлен, чтобы сначала сформировать базу данных mysql с помощью ядра mysql EF. Спасибо конечно.
Леандро

16
  1. Убедитесь, что это доступно в вашем файле project.json «Microsoft.EntityFrameworkCore.Tools.DotNet»: «1.0.0-preview3-final».

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

  1. Запустите команду в консоли диспетчера пакетов

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

это все, что будет работать


9
на самом деле я исправляю это, устанавливая пакет
nuget

@kepung - мне пришлось это сделать после недавнего обновления VS2017. Странный. Спасибо за ваш комментарий, так как он решил проблему для меня.
KSwift87

10

Убедитесь, что вы запускаете VS от имени администратора и установили следующие пакеты:

  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.SqlServer.Design
  • Microsoft.EntityFrameworkCore.Tools

1
Для моей аналогичной проблемы мне не нужно было устанавливать Microsoft.EntityFrameworkCore.SqlServer.Design, и я установил остальные, и они работают правильно.
MinaMRM

@MinaMRM спасибо. это сработало!!
Крестный отец

9

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

  • Microsoft.EntityFrameworkCore
  • Microsoft.EntityFrameworkCore.SqlServer
  • Microsoft.EntityFrameworkCore.Tools

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

Надеюсь, это поможет. :)


У меня есть все 3 из них, но я все еще получаю ошибку «Scafford-DbContext не распознан». Я попытался добавить Microsoft.EntityFrameworkCore.SqlServer.Design, но это не помогло.
Род

1

Если вы используете .NetCore 2.2, приведенная ниже команда работает для меня как шарм в командной строке или Git Bash. Перед запуском команды убедитесь, что вы находитесь прямо в папке проекта.

Например, C: \ App \ ProjectName:

 dotnet ef dbcontext scaffold "Server=.\;Database=Databasename;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model

1

Я установил Microsoft.EntityFrameworkCore.Tools из диспетчера пакетов NuGet, и он был виден в установленных пакетах. Но я продолжал получать эту ошибку.

Перезапуск Visual Studio (2019 / версия 16.4.4) исправил это для меня.


1

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папка.


1

Убедитесь, что вы используете правильную консоль, «Консоль диспетчера пакетов». Существует также консоль «Терминал», которая очень похожа, но не работает для этой команды. Консоль диспетчера пакетов находится в меню «Просмотр» -> «Другие окна» (начиная с Visual Studio 2019, версия 16.6.5).


-1

Недавно я столкнулся с другой причиной этой ошибки: сам NuGet устарел.

Обновление NuGet устранило проблему.

Если ответ Деванатана вам не подходит, убедитесь, что сам NuGet обновлен.


-2

Для меня ... при копировании вставки команды из 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.