Entity Framework Core: DbContextOptionsBuilder ไม่มีนิยามสำหรับ 'usesqlserver' และไม่มีเมธอดส่วนขยาย 'useqlserver'


171

ฉันยังใหม่กับ EF core และฉันกำลังพยายามทำให้มันทำงานกับโครงการ ASP.NET Core ของฉัน

ฉันได้รับข้อผิดพลาดข้างต้นในstartup.csขณะพยายามกำหนดค่าDbContextเพื่อใช้สตริงการเชื่อมต่อจาก config ฉันกำลังทำตามบทช่วยสอนนี้: https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

รหัสที่มีปัญหาใน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));
        }

UseSqlServerวิธีการได้รับการยอมรับถ้าฉันใส่โดยตรงลงในบริบท:

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

การค้นคว้าทางออนไลน์ทั้งหมดของฉันชี้ให้เห็นถึงการอ้างอิงที่ขาดหายไป แต่ดูเหมือนว่าฉันไม่สามารถหาข้อมูลที่ขาดหายไปได้ ( ดูภาพ )


สิ่งเดียวกัน intellissense ไม่พบวิธีการเช่นกัน
Maxime Laflamme

คำตอบ:


27

นี่เป็นปัญหาที่ทราบในระบบโครงการ ดูdotnet / project-system # 1741


ขอขอบคุณแก้ไขปัญหาโดยกลับไปที่. net framework การกำหนดเป้าหมายหลัก
Maxime Laflamme

12
นี่ไม่ใช่คำตอบที่ถูกต้องติดตั้ง Microsoft.EntityFrameworkCore.SqlServer NuGet Package ตามคำแนะนำในคำตอบถัดไปและจะแก้ไขปัญหาได้
numX

การอัปเดตโครงการฐานข้อมูลกรอบเอนทิตีของฉัน (ซึ่งแยกจากโครงการ ASP.NET ของฉัน) ช่วยแก้ปัญหานี้ได้ เช่นเดียวกับที่ @numX กล่าว ติดตั้ง Microsoft.EntityFrameworkCore.SqlServer ในโครงการที่เหมาะสมในโซลูชันของคุณ
OpTech Marketing

402

ก่อนอื่นเราติดตั้งMicrosoft.EntityFrameworkCore.SqlServer NuGet Package:

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

จากนั้นหลังจากนำเข้าเนมสเปซด้วย

using Microsoft.EntityFrameworkCore;

เราเพิ่มบริบทฐานข้อมูล:

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

4
ขอบคุณสำหรับคำตอบ แต่ฉันทำไปแล้ว ฉันเริ่มสงสัยว่ามีบางอย่างเสียหายในโครงการเดิมของฉัน ฉันจะลองดูว่าฉันสามารถทำซ้ำจากโครงการใหม่ได้หรือไม่ ...
Maxime Laflamme

11
คำตอบนี้ควรถูกทำเครื่องหมายว่าเป็นคำตอบที่ถูกต้องไม่ใช่คำตอบอื่น ๆ เหตุผลก็คือวิธี UseSqlServer มาจากแพ็คเกจนี้ไม่ใช่แพ็คเกจอื่น
H35 น.

114

เพิ่ม using Microsoft.EntityFrameworkCore;

แก้ไขปัญหาให้ฉันด้วยตนเอง

พบว่าที่นี่

แก้ไข ...

สำหรับ dotnet core 3.1 เพิ่ม

Microsoft.EntityFrameworkCore.SqlServer


5
นี่คือคำตอบ
smulholland2

แก้ไขให้ฉัน! อย่างไรก็ตามมันไม่ได้อยู่ในรายการคำแนะนำ ctrl +
Ron Splinter

แก้ไขให้ฉันในปี 2019 ด้วย. Net Core 2.2
lucamuh

2
ใช่ แต่ฉันพบว่าจำเป็นต้องใช้แพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer สำหรับ dotnetcore 3.1 ก่อนหน้านั้นดูเหมือนว่า Microsoft.EntityFrameworkCore เพียงอย่างเดียวก็เพียงพอแล้ว
Jeremy Ray Brown

31

ติดตั้ง NuGet Package ด้านล่างจะช่วยแก้ปัญหาของคุณได้

Microsoft.EntityFrameworkCore.SqlServer

ติดตั้งแพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer


1
เพิ่มคำอธิบายอีกเล็กน้อยเกี่ยวกับวิธีการที่คำสั่งบรรทัดเดียวนี้จะแก้ปัญหาของ op โดยเฉพาะที่นี่คุณกำลังพูดถึงแพ็คเกจดังนั้นคุณต้องอธิบายว่าแพ็คเกจนั้นทำงานอย่างไร
Parth Pandya

"DbContextOptionsBuilder.UseSqlServer"มีอยู่ในแพ็คเกจMicrosoft.EntityFrameworkCore.SqlServerดังนั้นจำเป็นต้องเพิ่มการอ้างอิงเพื่อแก้ปัญหาการสร้าง
Phani K

18

ทำตามขั้นตอนด้านล่างนี้

ติดตั้ง Entity Framework Core Design และผู้ให้บริการฐานข้อมูล SQL Server สำหรับ Entity Framework Core:

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

นำเข้า Entity Framework Core:

using Microsoft.EntityFrameworkCore;

และกำหนดค่า DbContext ของคุณ:

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

ส่วนนี้ของโซลูชันที่คุณเพิ่มusingคำสั่งด้วยตนเองคือสิ่งที่ใช้ได้ผลสำหรับฉัน - ดูเหมือนว่าบรรณาธิการของฉันตรวจไม่พบแพ็คเกจในชุดประกอบ
Kyle L.

9

ไม่มีแพ็กเกจ เปิด Package Manager Console และรันโค้ดด้านล่าง:

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

7

ฉันใช้ Visual Studio Code

1) ลองติดตั้งแพ็คเกจ 'Microsoft.EntityFrameworkCore.SqlServer' โดยระบุหมายเลขเวอร์ชัน

VS รหัส :

'dotnet เพิ่มแพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio: -

'ติดตั้งแพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

อ้างอิงลิงค์ ' Package' Microsoft.EntityFrameworkCore.SqlServer 'ไม่เข้ากันกับ' all 'frameworks ในโปรเจ็กต์ ' สำหรับการทำ

2) จากนั้นเพิ่มเนมสเปซ ' โดยใช้ Microsoft.EntityFrameworkCore; 'ด้วยตนเองในไฟล์ Startup.cs

โปรดดูที่ลิงค์ด้านล่าง https://github.com/aspnet/EntityFramework/issues/7891

3) หากคุณพบปัญหาการพึ่งพาสำหรับ ' Microsoft.EntityFrameworkCore.SqlServer.Design'เช่น "Package ' Microsoft.EntityFrameworkCore.Design' ไม่เข้ากันกับ 'all' frameworks ในโครงการ " เราจำเป็นต้องเรียกใช้คำสั่งด้านล่าง

VS รหัส: -

dotnet เพิ่มแพ็คเกจ Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

ติดตั้งแพ็คเกจ Microsoft.EntityFrameworkCore.Design -v 1.1



4

ฉันเชื่อว่าสิ่งนี้สามารถแก้ไขได้โดยเพิ่มการอ้างอิงโครงการไปยัง Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer ไม่ได้ติดตั้งโดยตรงในโปรเจ็กต์ของฉัน แต่แพ็คเกจ. Design จะติดตั้งเป็นสิ่งที่จำเป็นต้องมี


การติดตั้งแพ็กเกจที่ไม่จำเป็นซึ่งนำมาซึ่งโปรเจ็กต์ที่จำเป็นเนื่องจากการพึ่งพาแบบข้ามมิติไม่ใช่วิธีแก้ปัญหา
Smit

คุณถือว่าแพคเกจไม่จำเป็น แต่ก็แก้ไขโครงการของฉันเมื่อฉันมีปัญหาเดียวกัน
Andrew S

แพ็คเกจนั้นไม่จำเป็นสำหรับคำถามปัจจุบัน อาจจำเป็นสำหรับปัญหาที่แตกต่างกัน แต่ไม่ใช่ปัญหานี้
Smit

ณ วันนี้ 27 กรกฎาคมคุณสามารถติดตั้งได้เพียงแพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer และจะแก้ปัญหาได้
danfer

3
ณ วันนี้ 5 / ก.พ. / 2018 คุณยังต้องเพิ่มแพ็คเกจ Microsoft.EntityFrameworkCore.SqlServer.Design สิ่งนี้ถูกสังเกตโดยใช้โครงการเว็บ ASP.NET Core 2.0.1
มาตุภูมิ

4

ดังที่กล่าวไว้ในคำตอบการให้คะแนนสูงสุดโดย Win คุณอาจต้องติดตั้ง Microsoft.EntityFrameworkCore.SqlServer NuGet Package แต่โปรดทราบว่าคำถามนี้ใช้ mvc หลักของ asp.net ใน ASP.NET Core 2.1 ล่าสุด MS ได้รวมสิ่งที่เรียกว่า metapackage ที่เรียกว่า Microsoft.AspNetCore.App

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

คุณสามารถดูข้อมูลอ้างอิงได้หากคุณคลิกขวาที่โครงการ ASP.NET Core MVC ในตัวสำรวจโซลูชันและเลือก Edit Project File

คุณควรเห็น metapackage นี้ถ้าเว็บแอพหลักของ ASP.NET ใช้คำสั่ง

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

Microsoft.EntityFrameworkCore.SqlServer รวมอยู่ใน metapackage นี้ ดังนั้นใน Startup.cs ของคุณคุณอาจต้องเพิ่ม:

using Microsoft.EntityFrameworkCore;


4

ใน Visual Studio ตรวจสอบNuGet Package Manager => Manage Packages for Solutionตรวจสอบแพ็คเกจทั้งหมดนี้ไม่ว่าจะได้รับการติดตั้งในโซลูชันของคุณหรือไม่ดังต่อไปนี้:

  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

ฉันแก้ไขปัญหาเดียวกันหลังจากตรวจสอบว่าติดตั้งแพ็คเกจข้างต้นทั้งหมดแล้ว


3

สำหรับฉันปัญหานี้เกิดขึ้นกับ Visual Studio Code และฉันสามารถแก้ไขได้ด้วย 2 ขั้นตอน:

  1. เพิ่มด้วยตนเอง using Microsoft.EntityFrameworkCore;
  2. ทำงานdotnet buildในเทอร์มินัล


3

เพิ่มครั้งแรก Install-Package Microsoft.EntityFrameworkCore.SqlServer

เพิ่มในไฟล์. cs ของคุณ using Microsoft.EntityFrameworkCore;

สุดท้ายเพิ่มสิ่งนี้ในแกนของคุณ Startup.cs

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

2

หากคุณกำลังประสบปัญหานี้ในกรณีของ Sqlite แล้ว

. ฉันคิดว่านี่เป็นปัญหากับเวอร์ชันของ Sqlite ฉันมีปัญหาเดียวกันเมื่อฉันใช้SqLiteเวอร์ชันนี้

เวอร์ชัน 2.2.4 :

ป้อนคำอธิบายภาพที่นี่

หลังจากตรวจสอบเวอร์ชันที่นี่ ป้อนคำอธิบายภาพที่นี่ฉันเปลี่ยนเวอร์ชันแล้วก็ใช้งานได้

ป้อนคำอธิบายภาพที่นี่

ไม่มีข้อผิดพลาดหลังจากใช้สิ่งนี้

เวอร์ชัน 2.1.2 :

ป้อนคำอธิบายภาพที่นี่



1

ฉันเข้าใจสิ่งนี้โดยง่าย ๆ :

เพิ่มSqlServerDbContextOptionsExtensionsในชั้นเรียนที่มีปัญหาแก้ไขSqlServerDbContextOptionsExtensions

วิธีนี้ช่วยแก้ปัญหาต้องขาดข้อมูลอ้างอิงบางส่วนไปโดยปริยาย


1

สำหรับใครที่ยังมีปัญหานี้: ใช้ NuGet เพื่อติดตั้ง: Microsoft.EntityFrameworkCore.Proxies

ปัญหานี้เกี่ยวข้องกับการใช้ Castle Proxy กับ EFCore


1

ว้าวคำตอบมากมาย แต่ไม่มีใครพูดถึงแพ็คเกจMicrosoft.EntityFrameworkCore.InMemoryนี้!

เพิ่มการอ้างอิงลงในแพ็คเกจนี้: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2" />และคุณควรจะไป


1

ฉันมีปัญหานี้เมื่อฉันย้ายไปที่Microsoft.EntityFrameworkCore.SqlServer v3.0.0 และMicrosoft.EntityFrameworkCore.Tools v3.0.0

เมื่อฉันเปลี่ยนกลับไปเป็น v2.2.6 ในไลบรารีทั้งสองข้อผิดพลาดก็หายไป นี่เป็นวิธีแก้ปัญหามากกว่าวิธีแก้ปัญหา แต่จะช่วยให้คุณเริ่มใช้งานได้จนกว่าปัญหาจะได้รับการแก้ไข


1

วิธีง่ายๆในการแก้ไขปัญหานี้

ข้อความผิดพลาด:
ป้อนคำอธิบายภาพที่นี่

วิธีแก้ไข:
ติดตั้ง "microsoft.entityframeworkcore.sqlserver" ด้วย NuGet
ป้อนคำอธิบายภาพที่นี่

แก้ไขแล้ว :
ป้อนคำอธิบายภาพที่นี่

PS: ตรวจสอบให้แน่ใจว่าคุณใช้ EF กับเนื้อหา "โดยใช้ Microsoft.EntityFrameworkCore;" ป้อนคำอธิบายภาพที่นี่


0

สำหรับ asp.net core เวอร์ชัน 2.1 อย่าลืมเพิ่มแพ็คเกจต่อไปนี้เพื่อแก้ไขปัญหา (อย่างน้อยก็แก้ไขปัญหาโดยใช้ SQLite)

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

นี่คือการอ้างอิงของเอกสารโดยใช้ SQLite กับเอนทิตีกรอบคอร์ https://docs.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite


0

ฉันมีปัญหานี้ดูเหมือนว่าฉันไม่ได้เพิ่มแพ็คเกจ NuGet ที่จำเป็นแม้ว่าฉันคิดว่าฉันได้ทำไปแล้ว แต่อย่าลืมตรวจสอบทีละรายการ


0

ปัจจุบันทำงานร่วมกับ Entity Framework Core 3.1.3 วิธีแก้ปัญหาข้างต้นไม่สามารถแก้ไขปัญหาของฉันได้

อย่างไรก็ตามการติดตั้งแพคเกจ Microsoft.EntityFrameworkCore.Proxies ในโครงการของฉันช่วยแก้ไขปัญหาได้ ตอนนี้ฉันสามารถเข้าถึงการเรียกใช้เมธอด UseLazyLoadingProxies () เมื่อตั้งค่าตัวเลือก DBContext ของฉัน

หวังว่านี่จะช่วยใครบางคนได้ ดูบทความต่อไปนี้:

ขี้เกียจโหลดใน EF Core


0

ติดตั้ง - แพ็คเกจ:

**Microsoft.EntityFrameworkCore.SqlServer**

จากนั้นเพิ่มอันดับต้น ๆ ของชั้นเรียนของคุณ:

**Microsoft.EntityFrameworkCore;**

ที่ได้ผลสำหรับฉัน


0

ผมต้องใช้เส้น

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

ในวิธี ConfigureServices ใน Startup.cs


0

การคัดลอกโค้ดต่อไปนี้ลงใน TodoApi.csproj จากhttps://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApiช่วยแก้ปัญหาที่คล้ายกันให้ฉัน

<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 ทั้งหมดอาจมากเกินไป แต่รวมถึง EntityFrameworkCore


0

ฉันมีปัญหาเดียวกัน แต่ปัญหาก็หายไปหลังจากกลับไปและแก้ไขDbContextปัญหาไวยากรณ์ที่ไม่ถูกต้องเช่นที่ควรจะเป็นExampleDbContextClass: DbContextในขณะที่ฉันพลาดDbContextส่วนในคลาสบริบทที่คุณกำหนดDbSetไฟล์. นอกจากนี้ฉันตรวจสอบว่าจำเป็นต้องมีการอ้างอิงต่อไปนี้เพื่อให้สามารถเชื่อมต่อกับ SqlServer ได้ <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.6" /> ตรวจสอบด้วยว่าเวอร์ชันที่คุณติดตั้งนั้นน้อยกว่าเวอร์ชันปัจจุบันของโปรเจ็กต์ของคุณเพื่อให้ปลอดภัย เช่นถ้าโปรเจ็กต์ของคุณใช้ 3.1 อย่าพยายามใช้อันใหม่กว่าซึ่งจะเป็นตัวอย่างเช่น 3.1.9 ฉันก็มีปัญหาเช่นกัน


0

Project ทำงานใน DotNET Core 3.1+ หรือสูงกว่า (อนาคต)

เพิ่มแพ็คเกจนี้:

  1. NuGet: Microsoft.EntityFrameworkCore.Tools
  2. การกำหนดค่าโครงการ (.csproj): <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.8">

สิ่งนี้ไม่ถูกต้อง UseSqlServerเป็นส่วนหนึ่งของ Microsoft.EntityFrameworkCore.SqlServer ตามที่กล่าวไว้ในคำตอบอื่น ๆ
Gert Arnold

0

โซลูชันของคุณใช้งานได้ดี

เมื่อฉันดูวิดีโอนี้จนถึง 17 นาที: https://www.youtube.com/watch?v=fom80TujpYQ ฉันพบปัญหาที่นี่:

 services.AddDbContext<PaymentDetailContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DevConnection")));

UseSqlServer ไม่รู้จักดังนั้นฉันจึง ติดตั้งแพ็คเกจนี้ Microsoft.EntityFrameworkCore.SqlServer -Version 3.1.5

& ใช้ Microsoft.EntityFrameworkCore;

จากนั้นปัญหาของฉันจะได้รับการแก้ไข เกี่ยวกับฉัน: โดยพื้นฐานแล้วฉันเป็นโปรแกรมเมอร์ PHP ล้วนๆตั้งแต่เริ่มต้นและวันนี้มีเพียงฉันที่เริ่มต้นการเข้ารหัส. net ขอบคุณสำหรับชุมชนที่ดีใน. net

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.