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 ).

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

Jawaban:

24

Ini adalah masalah yang diketahui dalam sistem proyek. Lihat dotnet / proyek-sistem # 1741

bricelam
sumber
Terima kasih, mengatasi masalah dengan kembali ke kerangka kerja .net penargetan inti.
Maxime Laflamme
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")));
Menang
sumber
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

Victor.Uduak
sumber
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

Phani K
sumber
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 
Daniel Melo
sumber
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)
);
Bruno Pereira
sumber
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

Krishna
sumber
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.

Bugay Sarikaya
sumber
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;

Hevski
sumber
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.

Andrew S
sumber
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.
Askar
sumber
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.

Wen Qin Yap
sumber
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")));
        }
Jaydeep Shil
sumber
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

TAHA SULTAN TEMURI
sumber
1

Saya menyiasati ini hanya dengan:

Menambahkan SqlServerDbContextOptionsExtensions ke kelas yang dimaksud SelesaikanSqlServerDbContextOptionsExtensions

Ini memperbaiki masalah, harus kehilangan beberapa referensi secara default.

Baz G
sumber
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.

Vima91
sumber
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.

pso
sumber
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.

Ian Gibblet
sumber
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

Willie Cheng
sumber
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

hmota
sumber
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.

Cupu
sumber
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

Eric Conklin
sumber
0

Paket Instalasi:

**Microsoft.EntityFrameworkCore.SqlServer**

kemudian tambahkan bagian atas kelas Anda:

**Microsoft.EntityFrameworkCore;**

itu berhasil untuk saya

nh Dalim
sumber
0

Saya harus menggunakan saluran

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

dalam metode ConfigureServices di Startup.cs

Blain Ellis
sumber
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

kiwi7
sumber
-1

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

Saya menggunakan Core Versi 3.1

Mehedi Hasan
sumber
2
Jawaban ini sudah diberikan pada 2017-03-29. Tidak perlu mengulanginya lagi
Thomas Weller