Ядро Entity Framework: DbContextOptionsBuilder 'не содержит определения для' usesqlserver 'и никакого метода расширения' usesqlserver '

Я новичок в ядре EF, и я пытаюсь заставить его работать с моим основным проектом asp.net.

Я получаю вышеуказанную ошибку в моем startup.cs при попытке confiugure 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");
        }

Все мои поисковые онлайн-запросы указывают на недостающие ссылки, но я не могу найти, какой из них мне не хватает (см. изображение). ссылки

Любая помощь будет принята с благодарностью,

Спасибо

Ответ 2

Мы устанавливаем пакет NuGet для Microsoft.EntityFrameworkCore.SqlServer.

Microsoft.EntityFrameworkCore.SqlServer

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

Тогда

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

Обновление не забудьте добавить пространство имен using Microsoft.EntityFrameworkCore;

Ответ 3

добавление using Microsoft.EntityFrameworkCore;

вручную решил проблему для меня

Найдено, что здесь

Ответ 4

Установите ниже пакет NuGet решит вашу проблему

Microsoft.EntityFrameworkCore.SqlServer

Пакет установки Microsoft.EntityFrameworkCore.SqlServer

Ответ 5

Я использовал код Visual Studio.

1) Попробуйте установить пакет "Microsoft.EntityFrameworkCore.SqlServer", указав номер версии.

Код VS:

'dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Visual Studio: -

'Install-Package Microsoft.EntityFrameworkCore.SqlServer -v 1.1.1'

Ссылка " Пакет" Microsoft.EntityFrameworkCore.SqlServer "несовместима со" всеми "фреймворками в проекте " для этого.

2) Затем добавьте пространство имен с помощью Microsoft.EntityFrameworkCore; 'вручную в файле Startup.cs.

Перейдите по ссылке ниже https://github.com/aspnet/EntityFramework/issues/7891.

3) Если вы обнаружите какую-либо проблему с зависимостью для "Microsoft.EntityFrameworkCore.SqlServer.Design", например "Пакет" Microsoft.EntityFrameworkCore.Design "несовместим со" всеми "фреймворками в проекте " ", нам нужно выполнить следующую команду:

Код VS: -

dotnet добавить пакет Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

Установить-пакет Microsoft.EntityFrameworkCore.Design -v 1.1

Ответ 6

Проект → ManageNugetPackages → Обзор → Поиск "Microsoft.EntityFrameworkCore.SqlServer" и установите или обновите.

Ответ 7

Следуйте инструкциям ниже.

Установите 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)
);

Ответ 8

Я считаю, что это можно решить, добавив ссылку на проект в Microsoft.EntityFrameworkCore.SqlServer.Design

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServer не был непосредственно установлен в моем проекте, но пакет .Design все равно установит его как необходимое условие.

Ответ 9

сначала добавьте 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")));
        }

Ответ 10

Я обошел это просто:

Добавьте SqlServerDbContextOptionsExtensions к рассматриваемому классу Разрешить SqlServerDbContextOptionsExtensions

Это исправляет проблему, по умолчанию должно отсутствовать какая-либо ссылка.

Ответ 11

Для тех, у кого все еще есть эта проблема: используйте NuGet для установки: Microsoft.EntityFrameworkCore.Proxies

Эта проблема связана с использованием Castle Proxy с EFCore.

Ответ 12

Если вы столкнулись с этой проблемой в случае Sqlite, то

Я думаю, что это проблема с версией Sqlite, у меня была такая же проблема, когда я использовал эти версии SqLite

Версия 2.2.4:

enter image description here

После проверки версии здесь enter image description here я изменил версию, после чего она заработала.

enter image description here

Нет ошибок после использования этого

Версия 2.1.2:

enter image description here

Ответ 13

Как отмечается в ответе Win с наибольшим количеством очков, вам может понадобиться установить пакет NuGet Microsoft.EntityFrameworkCore.SqlServer, но учтите, что этот вопрос использует ядро asp.net mvc. В последнюю версию ASP.NET Core 2.1 MS включила так называемый метапакет под названием 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

Вы должны увидеть этот метапакет, если основное веб-приложение ASP.NET применяет оператор using

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

Microsoft.EntityFrameworkCore.SqlServer включен в этот метапакет. Так что в вашем Startup.cs вам может понадобиться только добавить:

using Microsoft.EntityFrameworkCore;

Ответ 14

Копирование следующего кода в 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.All может быть чрезмерным, но включает в себя EntityFrameworkCore

Ответ 15

Для 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

Ответ 16

Я должен был использовать линию

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

в методе ConfigureServices в Startup.cs

Ответ 17

Ух ты так много ответов, но никто не упомянул этот пакет Microsoft.EntityFrameworkCore.InMemory !

Добавьте ссылку на этот пакет: <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="2.2.2"/> и все будет хорошо.