Lõi khung thực thể: DbContextOptionsBuilder không chứa định nghĩa cho 'usedqlserver' và không có phương thức mở rộng 'usedqlserver'


150

Tôi chưa quen với lõi EF và tôi đang cố gắng để nó hoạt động với dự án ASP.NET Core của mình.

Tôi gặp lỗi ở trên startup.cskhi thử cấu hình DbContextđể sử dụng chuỗi kết nối từ cấu hình. Tôi đang theo hướng dẫn này: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Mã có vấn đề trong startup.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.SpaServices.Webpack;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.EntityFrameworkCore;
using tracV2.models;
using tracV2.data;

namespace tracV2
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();

            services.AddSingleton<IConfiguration>(Configuration);

            string conn = Configuration.GetConnectionString("optimumDB");

            services.AddDbContext<tracContext>(options => options.usesqlserver(conn));
        }

Các UseSqlServerphương pháp được công nhận nếu tôi đặt nó trực tiếp vào bối cảnh:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace tracV2.data
{
    public class tracContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("myrealconnectionstring");
        }

Tất cả các nghiên cứu trực tuyến của tôi đều chỉ ra các tài liệu tham khảo bị thiếu, nhưng dường như tôi không thể tìm ra cái nào tôi đang thiếu ( xem hình ảnh ).


Điều tương tự, intellissense cũng không tìm thấy phương thức.
Maxime Laflamme

Câu trả lời:



351

Đầu tiên chúng tôi cài đặt Gói NuGet của Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Sau đó, sau khi nhập không gian tên với

using Microsoft.EntityFrameworkCore;

chúng tôi thêm bối cảnh cơ sở dữ liệu:

services.AddDbContext<AspDbContext>(options =>
    options.UseSqlServer(config.GetConnectionString("optimumDB")));

3
Cảm ơn câu trả lời nhưng tôi đã làm điều đó. Tôi bắt đầu nghi ngờ một cái gì đó bị hỏng trong dự án ban đầu của tôi. Tôi sẽ cố gắng xem liệu tôi có thể sao chép từ một dự án mới không ...
Maxime Laflamme

10
Câu trả lời này phải được đánh dấu là câu trả lời đúng chứ không phải câu trả lời khác, lý do là phương thức UseSqlServer là từ gói này chứ không phải các gói khác.
H35am

107

thêm using Microsoft.EntityFrameworkCore;

tự giải quyết vấn đề cho tôi

Tìm thấy ở đây

Biên tập...

cho lõi dotnet 3.1 thêm

Microsoft.EntityFrameworkCore.SqlServer


5
Đây là câu trả lời.
smulholland2

Đã sửa nó cho tôi! Bằng cách nào đó, nó không có trong danh sách gợi ý ctrl +.
Ron Splinter

Đã sửa lỗi cho tôi vào năm 2019 với .Net Core 2.2
lucamuh

1
Có, nhưng tôi thấy rằng gói Microsoft.EntityFrameworkCore.SqlServer là cần thiết cho dotnetcore 3.1. Trước đó, có vẻ như Microsoft.EntityFrameworkCore thôi là đủ.
Jeremy Ray Brown

31

Cài đặt bên dưới Gói NuGet sẽ giải quyết vấn đề của bạn

Microsoft.EntityFrameworkCore.SqlServer

Cài đặt-Gói Microsoft.EntityFrameworkCore.SqlServer


1
Thêm một chút giải thích về cách lệnh một dòng này sẽ giải quyết vấn đề của op. Cụ thể, ở đây bạn đang giải quyết một gói nên bạn cần giải thích cách gói đó hoạt động.
Parth Pandya

"DbContextOptionsBuilder.UseSqlServer" có sẵn trong gói Microsoft.EntityFrameworkCore.SqlServer , vì vậy cần thêm tham chiếu của nó để giải quyết vấn đề xây dựng.
Phani K

9

Gói bị thiếu. Mở Gói quản lý bảng điều khiển và thực thi mã dưới đây:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

Làm theo các bước dưới đây.

Cài đặt Entity Framework Core Design và nhà cung cấp cơ sở dữ liệu SQL Server cho Entity Framework Core:

dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer

Nhập lõi khung thực thể:

using Microsoft.EntityFrameworkCore;

Và cấu hình DbContext của bạn:

var connectionString = Configuration.GetConnectionString("myDb");
services.AddDbContext<MyDbContext>(options => 
    options.UseSqlServer(connectionString)
);

7

Tôi đã sử dụng Visual Studio Code.

1) Cố gắng cài đặt gói 'Microsoft.EntityFrameworkCore.SqlServer' bằng cách chỉ định số phiên bản.

Mã VS :

'dotnet thêm gói Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio:-

'Cài đặt-Gói Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Tham khảo liên kết ' Gói' Microsoft.EntityFrameworkCore.SqlServer 'không tương thích với' tất cả 'khung trong dự án ' để thực hiện.

2) Sau đó thêm không gian tên ' bằng Microsoft.EntityFrameworkCore; 'thủ công trong tệp Startup.cs.

Tham khảo liên kết dưới đây https://github.com/aspnet/EntityFramework/issues/7891 .

3) Nếu bạn gặp bất kỳ vấn đề phụ thuộc nào đối với ' Microsoft.EntityFrameworkCore.SqlServer.Design' , như "Gói ' Microsoft.EntityFrameworkCore.Design' không tương thích với các khung 'tất cả' trong dự án ", chúng tôi cần chạy lệnh dưới đây,

Mã VS: -

dotnet thêm gói Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Cài đặt-Gói Microsoft.EntityFrameworkCore.Design -v 1.1


1
Điều này thực sự hoạt động. Đây là câu trả lời tốt nhất cho câu hỏi. Cảm ơn @Krishna
penderi

6

Dự án -> ManageNugetPackages -> Duyệt -> Tìm kiếm "Microsoft.EntityFrameworkCore.SqlServer" và cài đặt hoặc cập nhật.


4

Như được đề cập bởi câu trả lời hàng đầu của Win, bạn có thể cần cài đặt Microsoft.EntityFrameworkCore.SqlServer Gói NuGet, nhưng xin lưu ý rằng câu hỏi này đang sử dụng mvc lõi asp.net. Trong ASP.NET Core 2.1 mới nhất, MS đã bao gồm cái được gọi là siêu dữ liệu có tên Microsoft.AspNetCore.App

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage-app?view=aspnetcore-2.2

Bạn có thể thấy tham chiếu đến nó nếu bạn bấm chuột phải vào dự án ASP.NET Core MVC trong trình khám phá giải pháp và chọn Edit Project File

Bạn sẽ thấy siêu dữ liệu này nếu web lõi ASP.NET áp dụng câu lệnh sử dụng

<PackageReference Include="Microsoft.AspNetCore.App" />

Microsoft.EntityFrameworkCore.SqlServer được bao gồm trong siêu dữ liệu này. Vì vậy, trong Startup.cs của bạn, bạn có thể chỉ cần thêm:

using Microsoft.EntityFrameworkCore;


3

Tôi tin rằng điều này có thể được giải quyết bằng cách thêm một tham chiếu dự án vào Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer không được cài đặt trực tiếp trong dự án của tôi, nhưng gói .Design sẽ cài đặt nó bằng mọi cách như một điều kiện tiên quyết.


Cài đặt gói không cần thiết mang lại dự án bắt buộc vì phụ thuộc quá độ không phải là giải pháp cho vấn đề.
Smit

Bạn cho rằng gói là không cần thiết, nhưng nó đã sửa lỗi dự án của tôi khi tôi gặp vấn đề tương tự.
Andrew S

Gói đó là không cần thiết cho câu hỏi hiện tại. Nó có thể được yêu cầu cho vấn đề khác nhau nhưng không phải vấn đề này.
Smit

Kể từ hôm nay, ngày 27 tháng 7, bạn chỉ có thể cài đặt gói Microsoft.EntityFrameworkCore.SqlServer và nó sẽ giải quyết vấn đề
danfer

3
Kể từ hôm nay, ngày 5 tháng 2 năm 2018, bạn vẫn cần thêm gói Microsoft.EntityFrameworkCore.SqlServer.Design. Điều này đã được quan sát bằng cách sử dụng một dự án web ASP.NET Core 2.0.1.
Rus

3

Đối với tôi, sự cố này đã xảy ra với Visual Studio Code và tôi đã có thể khắc phục bằng 2 bước:

  1. Thêm thủ công using Microsoft.EntityFrameworkCore;
  2. Chạy dotnet buildtrong thiết bị đầu cuối.

3

Trong Visual Studio, hãy kiểm tra Trình quản lý gói NuGet => Quản lý gói cho giải pháp , kiểm tra tất cả các gói này, cho dù đã được cài đặt trong giải pháp của bạn hay chưa, như sau:

  1. EntityFrameworkCore
  2. Microsoft.EntityFrameworkCore
  3. Microsoft.EntityFrameworkCore.InMemory
  4. Microsoft.EntityFrameworkCore.Relational
  5. Microsoft.EntityFrameworkCore.Sqlite.Core
  6. Microsoft.EntityFrameworkCore.SqlServer
  7. Microsoft.EntityFrameworkCore.Tools

Tôi đã giải quyết các vấn đề tương tự sau khi kiểm tra tất cả các gói trên đã được cài đặt.



3

thêm đầu tiên Install-Package Microsoft.EntityFrameworkCore.SqlServer

tiếp theo thêm vào tập tin .cs của bạn using Microsoft.EntityFrameworkCore;

cuối cùng thêm điều này vào cốt lõi của bạn Startup.cs

  public void ConfigureServices(IServiceCollection services)
        {
            services.AddEntityFrameworkSqlServer().AddDbContext<ApplicationContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));
        }

2

Nếu bạn đang phải đối mặt với vấn đề này trong trường hợp của Sqlite thì

. Tôi nghĩ rằng đây là vấn đề với phiên bản Sqlite, tôi đã gặp vấn đề tương tự khi tôi sử dụng phiên bản này của SqLite này

Phiên bản 2.2.4 :

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

Sau khi kiểm tra phiên bản ở đây nhập mô tả hình ảnh ở đây tôi đã thay đổi phiên bản rồi.

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

Không có lỗi sau khi sử dụng

Phiên bản 2.1.2 :

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


1

Tôi đã khắc phục điều này bằng cách đơn giản:

Thêm vào SqlServerDbContextOptionsExtensions vào lớp trong câu hỏi Giải quyếtSqlServerDbContextOptionsExtensions

Điều này khắc phục sự cố, phải thiếu một số tham chiếu theo mặc định.


1

Đối với bất kỳ ai vẫn gặp sự cố này: Sử dụng NuGet để cài đặt: Microsoft.EntityFrameworkCore.Proxies

Vấn đề này liên quan đến việc sử dụng Castle Proxy với EFCore.


1

Wow rất nhiều câu trả lời chưa có ai đề cập đến gói Microsoft.EntityFrameworkCore.InMemory này !

Thêm tài liệu tham khảo cho gói này: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />và bạn nên đi.


1

Tôi gặp sự cố này khi chuyển sang Microsoft.EntityFrameworkCore.SqlServer v3.0.0 và Microsoft.EntityFrameworkCore.Tools v3.0.0

Khi tôi thay đổi trở lại v2.2.6 trên cả hai thư viện, lỗi đã biến mất. Đây là một cách giải quyết hơn là một giải pháp nhưng nó sẽ giúp bạn đứng dậy và chạy cho đến khi vấn đề được khắc phục.


1

Cách dễ dàng để khắc phục vấn đề này

Thông báo lỗi:
nhập mô tả hình ảnh ở đây

Giải pháp:
cài đặt "microsoft.entityframeworkcore.sqlserver" với NuGet
nhập mô tả hình ảnh ở đây

Đã sửa :
nhập mô tả hình ảnh ở đây

PS: đảm bảo bạn đã sử dụng EF trên nội dung "bằng Microsoft.EntityFrameworkCore;" nhập mô tả hình ảnh ở đây


0

Đối với asp.net core phiên bản 2.1, đảm bảo thêm gói sau để khắc phục sự cố. (Ít nhất điều này khắc phục sự cố bằng SQLite)

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design

Dưới đây là tài liệu tham khảo của tài liệu sử dụng SQLite với lõi khung thực thể. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

Tôi gặp vấn đề này, có vẻ như tôi đã không thêm các gói NuGet cần thiết, mặc dù tôi nghĩ rằng tôi đã làm như vậy, hãy chắc chắn kiểm tra từng cái một.


0

Hiện đang làm việc với Entity Framework Core 3.1.3. Không có giải pháp nào ở trên khắc phục vấn đề của tôi.

Tuy nhiên, việc cài đặt gói Microsoft.EntityFrameworkCore.Proxies cho dự án của tôi đã khắc phục sự cố. Bây giờ tôi có thể truy cập lệnh gọi phương thức UseLazyLoadingProxies () khi đặt các tùy chọn DBContext của mình.

Hy vọng điều này sẽ giúp được ai đó. Xem bài viết sau:

Tải lười biếng trong EF Core


0

Cài đặt gói:

**Microsoft.EntityFrameworkCore.SqlServer**

sau đó thêm đầu lớp của bạn:

**Microsoft.EntityFrameworkCore;**

điều đó làm việc cho tôi


0

Tôi đã phải sử dụng dòng

 services.AddEntityFrameworkSqlite().AddDbContext<MovieContext>(options => options.UseSqlServer(Configuration.GetConnectionString("MovieContext")));

trong phương thức ConfigureService trong Startup.cs


0

Sao chép mã sau vào TodoApi.csproj từ https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi đã giải quyết vấn đề tương tự cho tôi.

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Folder Include="wwwroot\" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
  </ItemGroup>

</Project>

Microsoft.AspNetCore. Tất cả có thể quá mức nhưng nó bao gồm EntityFrameworkCore


-1

Cài đặt gói NuGet Microsoft.EntityFrameworkCore.SqlServerđể giải quyết vấn đề này.

Tôi đang sử dụng Core Phiên bản 3.1


2
Câu trả lời này đã được đưa ra 2017 / 03-29. Không cần phải lặp lại lần nữa
Thomas Weller
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.