Thuật ngữ 'giàn giáo-dbcontext' không được công nhận là tên của lệnh ghép ngắn, hàm, tệp tập lệnh hoặc chương trình có thể hoạt động


88

Khi cố gắng tạo đoạn đầu bằng asp.net, lệnh này

giàn giáo-dbcontext "Nguồn dữ liệu = (cục bộ); Danh mục ban đầu = MyDb; Bảo mật tích hợp = True;" Mô hình Microsoft.EntityFrameworkCore.sqlserver -outputdir

Đưa ra lỗi này.

giàn giáo-dbcontext: Thuật ngữ 'giàn giáo-dbcontext' không được công nhận là tên của lệnh ghép ngắn, hàm, tệp tập lệnh hoặc chương trình có thể hoạt động. Kiểm tra chính tả của tên hoặc nếu một đường dẫn được bao gồm, hãy xác minh rằng đường dẫn là chính xác và thử lại. Tại dòng: 1 char: 1 + Stamold-dbcontext "Nguồn dữ liệu = (cục bộ); Danh mục ban đầu = MyDB; Trong ... + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ObjectNotFound: (giàn giáo-dbcontext: String) [], CommandNotFoundException + CompleteQualifiedErrorId: CommandNotFoundException

Tôi đã thử giải pháp ở đây , nhưng nó không hiệu quả với tôi.

Bất kỳ ý tưởng nào về nguyên nhân / cách chữa trị có thể là gì?


Đảm bảo rằng entityframework.tools nằm trong phần công cụ của project.json của bạn.
Tim Scriv 14/09/2016

Câu trả lời:


216

Đối với tôi, rõ ràng nó đã hoạt động khi tôi cũng đã chạy trong bảng điều khiển Trình quản lý gói:

 Install-Package Microsoft.EntityFrameworkCore.Tools 

Cũng đảm bảo rằng:

  • Để có các phụ thuộc khác (ví dụ Microsoft.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, Microsoft.EntityFrameworkCore.SqlServer.Design ...) được tham chiếu tùy theo nhu cầu của bạn.

  • Để chọn lắp ráp phù hợp làm mục tiêu cho các lệnh của bạn ở góc trên bên phải của bảng điều khiển PM (tôi thường bị đánh lừa khi quên nó ...)

Một vấn đề khác mà tôi gặp phải: với dbcontext nằm trong thư viện lớp riêng biệt, tôi đã gặp phải lỗi sau:

Không thể tìm thấy tập hợp nhà cung cấp có tên Microsoft.EntityFrameworkCore.SqlServer. Đảm bảo tên được chỉ định là chính xác và được tham chiếu bởi dự án.

Điều mà tôi đã có thể khắc phục bằng cách đặt thư viện lớp của mình làm dự án Khởi động trong VS (đừng hỏi tại sao vì nó có vẻ vô nghĩa, nhưng nó đã hoạt động).

Chỉnh sửa muộn, còn một điều cần biết: Bạn không thể chạy Scaffold-DbContext với thư viện lớp chỉ nhắm mục tiêu .Net Standard, bạn cũng phải bật netcoreapp trong đó, nếu không Scaffold-DbContext sẽ phàn nàn. Để hỗ trợ cả hai mục tiêu, hãy chỉnh sửa csproj thành: <TargetFrameworks>netcoreapp2.2;netstandard2.0</TargetFrameworks> Thay vì <TargetFramework>phần.

Sau tất cả những điều này, bạn sẽ có thể chạy Scaffold-DbContextdòng lệnh của mình với các đối số và chuỗi kết nối thích hợp.


2
Cám ơn vì cái này. Giải pháp của bạn vẫn hoạt động cho VS2019 sử dụng .net lõi 2.2
PaulC

Thật tệ là Microsoft đã không cải thiện điều này trong những tháng cuối cùng. Tôi đã không mong đợi câu trả lời của tôi để được như vậy hữu ích và rất lâu như một số phần của nó dường như là một cách giải quyết khó khăn cho một số hành vi IDE lạ ...
AFract

Tôi gặp phải lỗi: Không thể tìm thấy lắp ráp nhà cung cấp có tên Microsoft.EntityFrameworkCore.SqlServer. Đảm bảo tên được chỉ định là chính xác và được tham chiếu bởi dự án. Tôi cũng đã phải chạy: Cài đặt-Package Microsoft.EntityFrameworkCore.SqlServer
Ahmed Faizan

@AhmedFaizan thực sự nó là một trong những ví dụ về các gói được đề cập trong bài. Rất vui vì nó hữu ích
AFract

1
Được yêu cầu bởi NET Core 3.1 nhưng không phải bởi tài liệu chính thức của mysql, điều này phải được cài đặt để tạo cơ sở dữ liệu mysql trước với lõi mysql EF. Tất nhiên là cảm ơn.
Leandro

16
  1. Đảm bảo rằng điều này có sẵn trong tệp project.json "Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview3-final" của bạn.

nhập mô tả hình ảnh ở đây

  1. Chạy lệnh trong bảng điều khiển trình quản lý gói

nhập mô tả hình ảnh ở đây

đó là tất cả những gì nó sẽ hoạt động


9
thực sự tôi sửa lỗi này bằng cách cài đặt gói NuGet: Microsoft.EntityFrameworkCore.Tools Install-Package
kepung

@kepung - Tôi đã phải làm điều này sau bản cập nhật VS2017 gần đây. Kỳ quặc. Cảm ơn bạn đã bình luận vì nó đã giải quyết vấn đề cho tôi.
KSwift87

10

Đảm bảo bạn chạy VS với tư cách Quản trị viên và đã cài đặt các gói sau:

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

1
Đối với vấn đề tương tự của tôi, tôi không cần cài đặt Microsoft.EntityFrameworkCore.SqlServer.Design và tôi đã cài đặt phần còn lại và nó chạy chính xác.
MinaMRM

@MinaMRM cảm ơn. nó đã làm việc!!
The Godfather

9

Có cùng một vấn đề. Trong trường hợp của tôi, tôi đã thiếu một số phụ thuộc, vì vậy hãy đảm bảo rằng bạn có một số phụ thuộc sau:

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

nhập mô tả hình ảnh ở đây

Hy vọng điều này sẽ giúp ích. :)


Tôi có tất cả 3 trong số đó, nhưng tôi vẫn nhận được lỗi "Scafford-DbContext không được nhận dạng". Tôi đã thử thêm Microsoft.EntityFrameworkCore.SqlServer.Design, nhưng điều đó không giúp được gì.
Rod

2

Scaffoldlệnh là một phần của dbcontextlệnh trong EF. Dưới đây là các chi tiết để thành công scaffold:

nhập mô tả hình ảnh ở đây

Yêu cầu tham chiếu gói:

<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"/>

Vì vậy, lệnh giàn giáo của chúng ta sẽ giống như sau:

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

ServerGiá trị của bạn có thể khác nhau tùy theo tên máy chủ Db của bạn. Thay thế MyDatabasebằng tên Cơ sở dữ liệu của bạn như masterOutputDirectoryvào vị trí bạn muốn các lớp được tạo mới như Modelsthư mục của bạn.


1

Nếu bạn đang sử dụng .NetCore 2.2, lệnh dưới đây hoạt động giống như một sự quyến rũ đối với tôi trên dấu nhắc lệnh hoặc Git Bash. Đảm bảo rằng bạn đang trực tiếp trên thư mục dự án trước khi chạy lệnh.

Ví dụ C: \ App \ ProjectName:

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

1

Tôi đã cài đặt Microsoft.EntityFrameworkCore.Tools từ Trình quản lý gói NuGet và nó hiển thị trong các gói đã cài đặt. Nhưng tôi vẫn nhận được lỗi này.

Khởi động lại Visual Studio (2019 / Phiên bản 16.4.4) đã khắc phục sự cố cho tôi.


1

Đảm bảo rằng bạn đang sử dụng bảng điều khiển phù hợp, "Bảng điều khiển Trình quản lý Gói". Ngoài ra còn có một giao diện điều khiển "Terminal" trông rất giống, nhưng không hoạt động với lệnh này. Bảng điều khiển Trình quản lý gói có thể được tìm thấy trong Chế độ xem -> Windows khác (kể từ Visual Studio 2019, phiên bản 16.6.5)


-1

Gần đây tôi đã gặp phải một nguyên nhân khác gây ra lỗi này: Bản thân NuGet đã lỗi thời.

Cập nhật NuGet đã giải quyết được sự cố.

Nếu câu trả lời của Devanathan không phù hợp với bạn, hãy kiểm tra để đảm bảo bản thân NuGet đã được cập nhật.


-2

Đối với tôi ... khi sao chép, dán lệnh từ tài liệu microsoft, vì lý do nào đó, khoảng cách thừa đã được thêm vào xung quanh dấu gạch nối.

Loại bỏ các dấu gạch nối đã sửa nó:

Sai lầm:

Scaffold - DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer - OutputDir Models

tốt:

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=myDbName;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

Tài liệu cũng cho biết nếu bạn gặp lỗi này, hãy thử khởi động lại Visual Studio.

https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.