Entity Framework Core: DbContextOptionsBuilder tidak mengandung definisi untuk 'usesqlserver' dan tidak ada metode ekstensi 'usesqlserver'


150

Saya baru mengenal inti EF dan saya mencoba membuatnya bekerja dengan proyek Core ASP.NET saya.

Saya mendapatkan kesalahan di atas startup.csketika mencoba mengkonfigurasi DbContextuntuk menggunakan string koneksi dari konfigurasi. Saya mengikuti tutorial ini: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

Kode bermasalah di 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));
        }

The UseSqlServerMetode diakui jika saya memasukkannya langsung ke dalam konteks:

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");
        }

Semua riset saya secara online menunjuk pada referensi yang hilang, tetapi sepertinya saya tidak bisa menemukan yang mana yang saya lewatkan ( lihat gambar ).


Hal yang sama, intelegensi juga tidak menemukan metode.
Maxime Laflamme

Jawaban:



352

Pertama kita menginstal Paket NuGet Microsoft.EntityFrameworkCore.SqlServer :

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Lalu, setelah mengimpor namespace dengan

using Microsoft.EntityFrameworkCore;

kami menambahkan konteks basis data:

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

3
Terima kasih atas jawabannya tetapi saya sudah melakukannya. Saya mulai curiga ada sesuatu yang rusak dalam proyek asli saya. Saya akan mencoba untuk melihat apakah saya dapat mereproduksi dari proyek baru ...
Maxime Laflamme

10
Jawaban ini harus ditandai sebagai jawaban yang benar bukan yang lain, alasannya adalah bahwa metode UseSqlServer berasal dari paket ini dan bukan dari paket lain.
H35am

107

menambahkan using Microsoft.EntityFrameworkCore;

memecahkan masalah secara manual untuk saya

Ditemukan di sini

Edit ...

untuk dotnet core 3.1 tambahkan

Microsoft.EntityFrameworkCore.SqlServer


5
Ini jawabannya.
smulholland2

Perbaiki untuk saya! Entah bagaimana itu tidak ada dalam daftar saran ctrl +.
Ron Splinter

Memperbaikinya untuk saya pada tahun 2019 dengan .Net Core 2.2
lucamuh

1
Ya, tapi saya menemukan bahwa paket Microsoft.EntityFrameworkCore.SqlServer diperlukan untuk dotnetcore 3.1. Sebelum itu, tampaknya Microsoft.EntityFrameworkCore saja sudah cukup.
Jeremy Ray Brown

31

Instal di bawah Paket NuGet akan menyelesaikan masalah Anda

Microsoft.EntityFrameworkCore.SqlServer

Instal-Paket Microsoft.EntityFrameworkCore.SqlServer


1
Tambahkan sedikit penjelasan lebih lanjut tentang bagaimana perintah satu baris ini akan menyelesaikan masalah op. Secara khusus, di sini Anda menangani paket sehingga Anda perlu menjelaskan cara kerja paket itu.
Parth Pandya

"DbContextOptionsBuilder.UseSqlServer" tersedia di Microsoft.EntityFrameworkCore.SqlServer package, Jadi perlu menambahkan referensi untuk menyelesaikan masalah build.
Phani K

9

Paket tidak ada. Buka Paket Pengelola Konsol dan jalankan kode di bawah ini:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

Ikuti langkah-langkah di bawah ini.

Instal Entity Framework Core Design dan penyedia database SQL Server untuk Entity Framework Core:

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

Inti Kerangka Entitas Impor:

using Microsoft.EntityFrameworkCore;

Dan konfigurasikan DbContext Anda:

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

7

Saya menggunakan Visual Studio Code.

1) Cobalah untuk menginstal paket 'Microsoft.EntityFrameworkCore.SqlServer' dengan menentukan nomor versi.

Kode VS :

'dotnet tambahkan paket Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Studio visual:-

'Instal-Paket Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Rujuk tautan ' Paket' Microsoft.EntityFrameworkCore.SqlServer 'tidak kompatibel dengan kerangka' semua 'dalam proyek ' untuk melakukannya.

2) Kemudian tambahkan namespace ' menggunakan Microsoft.EntityFrameworkCore;'secara manual di file Startup.cs.

Lihat tautan di bawah ini https://github.com/aspnet/EntityFramework/issues/7891 .

3) Jika Anda mendapatkan masalah ketergantungan untuk ' Microsoft.EntityFrameworkCore.SqlServer.Design' , seperti "Paket ' Microsoft.EntityFrameworkCore.Design' tidak kompatibel dengan 'semua' kerangka kerja dalam proyek ", kita perlu menjalankan perintah di bawah ini,

Kode VS: -

dotnet tambahkan paket Microsoft.EntityFrameworkCore.Design -v 1.1

Studio visual

Instal-Paket Microsoft.EntityFrameworkCore.Design -v 1.1


1
Yang ini benar-benar berfungsi. Ini adalah jawaban terbaik untuk pertanyaan itu. Terima kasih @Krishna
penderi

6

Project -> ManageNugetPackages -> Browse -> Cari "Microsoft.EntityFrameworkCore.SqlServer" dan instal atau perbarui.


4

Seperti disebutkan oleh jawaban skor atas oleh Win, Anda mungkin perlu menginstal Microsoft.EntityFrameworkCore.SqlServer Paket NuGet, tetapi harap dicatat bahwa pertanyaan ini menggunakan asp.net core mvc. Dalam ASP.NET Core 2.1 terbaru, MS telah memasukkan apa yang disebut metapackage yang disebut Microsoft.AspNetCore.App

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

Anda dapat melihat referensi untuk itu jika Anda mengklik kanan proyek ASP.NET Core MVC di penjelajah solusi dan pilih Edit Project File

Anda akan melihat metapackage ini jika ASP.NET core webapps pernyataan menggunakan

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

Microsoft.EntityFrameworkCore.SqlServer termasuk dalam metapackage ini. Jadi di Startup.cs Anda, Anda mungkin hanya perlu menambahkan:

using Microsoft.EntityFrameworkCore;


3

Saya percaya ini dapat diselesaikan dengan menambahkan referensi proyek ke Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer tidak langsung diinstal di proyek saya, tetapi paket .Design akan tetap menginstalnya sebagai prasyarat.


Menginstal paket yang tidak perlu yang membawa proyek yang diperlukan sebagai ketergantungan transitif bukanlah solusi untuk masalah ini.
Smit

Anda menganggap paket itu tidak perlu, namun itu memperbaiki proyek saya ketika saya memiliki masalah yang sama persis.
Andrew S

Paket itu tidak perlu untuk pertanyaan saat ini. Mungkin diperlukan untuk masalah yang berbeda tetapi tidak untuk yang satu ini.
Smit

Mulai hari ini, 27 Juli, Anda dapat menginstal hanya paket Microsoft.EntityFrameworkCore.SqlServer dan itu akan menyelesaikan masalah
danfer

3
Sampai hari ini, 5 / Feb / 2018, Anda masih perlu menambahkan paket Microsoft.EntityFrameworkCore.SqlServer.Design. Ini diamati menggunakan proyek web ASP.NET Core 2.0.1.
Rus

3

Bagi saya masalah ini terjadi dengan Visual Studio Code dan saya dapat memperbaikinya dengan 2 langkah:

  1. Menambahkan secara manual using Microsoft.EntityFrameworkCore;
  2. Berjalan dotnet builddi terminal.

3

Di Visual Studio, periksa NuGet Package Manager => Kelola Paket untuk Solusi , periksa semua paket ini, apakah sudah diinstal dalam solusi Anda atau tidak, seperti di bawah ini:

  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

Saya memecahkan masalah yang sama setelah memeriksa semua paket di atas telah diinstal.



3

tambah pertama Install-Package Microsoft.EntityFrameworkCore.SqlServer

selanjutnya tambahkan file .cs Anda using Microsoft.EntityFrameworkCore;

akhirnya tambahkan ini di inti Anda Startup.cs

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

2

Jika Anda menghadapi masalah ini dalam kasus Sqlite maka

. Saya pikir ini adalah masalah dengan versi Sqlite, saya memiliki masalah yang sama ketika saya menggunakan versi SqLite ini

Versi 2.2.4 :

masukkan deskripsi gambar di sini

Setelah memeriksa versi di sini masukkan deskripsi gambar di sini saya mengubah versi kemudian bekerja.

masukkan deskripsi gambar di sini

Tidak ada kesalahan setelah menggunakan ini

Versi 2.1.2 :

masukkan deskripsi gambar di sini


1

Saya menyiasati ini hanya dengan:

Menambahkan SqlServerDbContextOptionsExtensions ke kelas yang dimaksud SelesaikanSqlServerDbContextOptionsExtensions

Ini memperbaiki masalah, harus kehilangan beberapa referensi secara default.


1

Bagi siapa pun yang masih memiliki masalah ini: Gunakan NuGet untuk menginstal: Microsoft.EntityFrameworkCore.Proxies

Masalah ini terkait dengan penggunaan Castle Proxy dengan EFCore.


1

Wow begitu banyak jawaban namun tidak ada yang menyebutkan paket Microsoft.EntityFrameworkCore.InMemory ini !

Tambahkan referensi ke paket ini: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />dan Anda harus siap.


1

Saya mengalami masalah ini ketika saya pindah ke Microsoft.EntityFrameworkCore.SqlServer v3.0.0 dan Microsoft.EntityFrameworkCore.Tools v3.0.0

Ketika saya berubah kembali ke v2.2.6 di kedua perpustakaan, kesalahan hilang. Ini lebih merupakan solusi daripada solusi tetapi itu akan membuat Anda bangun dan berjalan sampai masalah diperbaiki.


1

Cara mudah untuk memperbaiki masalah ini

Pesan eror:
masukkan deskripsi gambar di sini

Solusi:
untuk menginstal "microsoft.entityframeworkcore.sqlserver" dengan NuGet
masukkan deskripsi gambar di sini

Diperbaiki:
masukkan deskripsi gambar di sini

PS: pastikan Anda telah menggunakan EF pada konten "menggunakan Microsoft.EntityFrameworkCore;" masukkan deskripsi gambar di sini


0

Untuk asp.net core versi 2.1, pastikan untuk menambahkan paket berikut untuk memperbaiki masalah. (Setidaknya ini memperbaiki masalah menggunakan SQLite)

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

Berikut ini adalah referensi dari dokumentasi menggunakan SQLite dengan inti kerangka kerja. https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

Saya mengalami masalah ini, sepertinya saya belum menambahkan paket NuGet yang diperlukan, meskipun saya pikir saya telah melakukannya, pastikan untuk memeriksanya, satu per satu.


0

Saat ini bekerja dengan Entity Framework Core 3.1.3. Tidak ada solusi di atas yang memperbaiki masalah saya.

Namun, menginstal paket Microsoft.EntityFrameworkCore.Proxies di proyek saya memperbaiki masalah ini. Sekarang saya dapat mengakses pemanggilan metode UseLazyLoadingProxies () saat mengatur opsi DBContext saya.

Semoga ini bisa membantu seseorang. Lihat artikel berikut:

Pemuatan Malas di EF Core


0

Paket Instalasi:

**Microsoft.EntityFrameworkCore.SqlServer**

kemudian tambahkan bagian atas kelas Anda:

**Microsoft.EntityFrameworkCore;**

itu berhasil untuk saya


0

Saya harus menggunakan saluran

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

dalam metode ConfigureServices di Startup.cs


0

Menyalin kode berikut ke TodoApi.csproj dari https://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApi memecahkan masalah yang sama untuk saya.

<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. Semua mungkin berlebihan tetapi termasuk EntityFrameworkCore


-1

Instal Paket NuGet Microsoft.EntityFrameworkCore.SqlServeruntuk mengatasi masalah ini.

Saya menggunakan Core Versi 3.1


2
Jawaban ini sudah diberikan pada 2017-03-29. Tidak perlu mengulanginya lagi
Thomas Weller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.