Термін 'scaffold-dbcontext' не розпізнається як ім'я командлета, функції, файлу сценарію чи операційної програми


88

При спробі побудувати ешафот з ядром asp.net цією командою

scaffold-dbcontext "Джерело даних = (локальне); Початковий каталог = MyDb; Інтегрована безпека = Істинно;" Моделі Microsoft.EntityFrameworkCore.sqlserver -outputdir

Видає цю помилку.

scaffold-dbcontext: термін "scaffold-dbcontext" не розпізнається як ім'я командлета, функції, файлу сценарію чи операційної програми. Перевірте написання імені, або якщо шлях був включений, перевірте правильність шляху та повторіть спробу. У рядку: 1 char: 1 + scaffold-dbcontext "Джерело даних = (локальне); Початковий каталог = MyDB; У ... + ~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (scaffold-dbcontext: String) [], CommandNotFoundException + FullyQualifiedErrorId: CommandNotFoundException

Я спробував рішення тут , але воно не працює для мене.

Будь-яка ідея, яка причина / лікування може бути?


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

Відповіді:


216

У мене це, мабуть, спрацювало, коли я також запустив у консолі Package Manager:

 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>розділу.

Після всього цього ви зможете запустити свій Scaffold-DbContextкомандний рядок із належними аргументами та рядком з'єднання.


2
Дякую за це. Ваше рішення все ще працює для VS2019, використовуючи .net core 2.2
PaulC

Шкода, що Microsoft не покращила цього за останні місяці. Я не очікував, що моя відповідь буде настільки корисною, і до тих пір, поки якась її частина здається хитрим обхідним шляхом для якоїсь дивної поведінки IDE ...
AFract

Я зіткнувся з помилкою: Не вдалося знайти збірку постачальника з іменем Microsoft.EntityFrameworkCore.SqlServer. Переконайтеся, що вказане ім’я є правильним і на нього посилається проект. Мені також довелося запустити: Install-Package Microsoft.EntityFrameworkCore.SqlServer
Ахмед

@AhmedFaizan насправді це один із прикладів пакетів, згаданих у дописі. Радий, що це було корисно
AFract

1
Це потрібно для NET Core 3.1, але не для офіційної документації mysql, це повинно бути встановлено, щоб спочатку побудувати базу даних mysql за допомогою ядра EF mysql. Дякую звичайно.
Леандро

16
  1. Переконайтеся, що це доступно у вашому файлі project.json "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final".

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

  1. Запустіть команду в консолі менеджера пакетів

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

це все, що буде працювати


9
насправді я це виправляю, встановивши nuget-пакет: Install-Package Microsoft.EntityFrameworkCore.Tools
kepung

@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 Package Manager, і це було видно в встановлених пакетах. Але я постійно отримував цю помилку.

Перезапуск 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"/>

Тож наша команда ешафоту повинна виглядати так:

dotnet ef dbcontext scaffold "Server=localhost\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o OutputDirectory

Ваше Serverзначення може відрізнятися відповідно до імені вашого сервера Db. Замініть MyDatabaseна ім'я вашої бази даних, як masterі OutputDirectoryдо місця, де ви хочете, щоб ваші нещодавно створені розкладені класи, такі як Modelsпапка.


1

Переконайтеся, що ви використовуєте правильну консоль, "Консоль диспетчера пакетів". Існує також консоль "Термінал", яка виглядає дуже схожою, але не працює для цієї команди. Консоль диспетчера пакетів можна знайти у меню Перегляд -> Інші Windows (станом на 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.