エンティティフレームワークコア:DbContextOptionsBuilderには「usesqlserver」の定義と拡張メソッド「usesqlserver」が含まれていません


150

私はEFコアを初めて使用し、それをASP.NETコアプロジェクトで使用できるようにしています。

configの接続文字列を使用するstartup.csようにDbContextを設定しようとすると、上記のエラーが発生します。私はこのチュートリアルに従っています: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");
        }

私のすべてのオンライン調査では、欠落している参照が指摘されていますが、どれが欠落しているのかわかりません(画像を参照)。


同じことで、インテリセンスもメソッドを見つけられません。
Maxime Laflamme 2017年

回答:



352

まず、Microsoft.EntityFrameworkCore.SqlServer NuGetパッケージをインストールします

PM > Install-Package Microsoft.EntityFrameworkCore.SqlServer

次に、名前空間をインポートした後

using Microsoft.EntityFrameworkCore;

データベースコンテキストを追加します。

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

3
回答ありがとうございます。元のプロジェクトで何かが破損しているのではないかと疑い始めています。新しいプロジェクトから再現できるかどうか試してみる...
Maxime Laflamme 2017年

10
この回答は、他の回答ではなく正解としてマークする必要があります。理由は、UseSqlServerメソッドがこのパッケージからのものであり、他のパッケージからのものではないためです。
H35am

107

追加 using Microsoft.EntityFrameworkCore;

手動で問題を解決しました

ここで見つけた

編集...

dotnet core 3.1追加

Microsoft.EntityFrameworkCore.SqlServer


5
これが答えです。
smulholland2

私のために修正しました!どういうわけか、提案リストctrl +にはありませんでした。
Ron Splinter 2018

.Net Core 2.2を使用して2019年に私のために修正しました
lucamuh

1
はい、しかしdotnetcore 3.1にはMicrosoft.EntityFrameworkCore.SqlServerパッケージが必要であることがわかりました。それ以前は、Microsoft.EntityFrameworkCoreだけで十分であるように見えました。
ジェレミーレイブラウン

31

NuGetパッケージの下にインストールすると問題が解決します

Microsoft.EntityFrameworkCore.SqlServer

インストールパッケージMicrosoft.EntityFrameworkCore.SqlServer


1
この1行のコマンドでopの問題がどのように解決されるかについて、もう少し説明を追加します。具体的には、ここではパッケージをアドレス指定しているので、そのパッケージがどのように機能するかを説明する必要があります。
Parth Pandya 2018

"DbContextOptionsBuilder.UseSqlServer"Microsoft.EntityFrameworkCore.SqlServerパッケージで利用できるので、ビルドの問題を解決するには、その参照を追加する必要があります。
Phani K 2018

9

パッケージがありません。パッケージマネージャーコンソールを開き、以下のコードを実行します。

Install-Package Microsoft.EntityFrameworkCore.SqlServer 

9

以下の手順に従ってください。

Entity Framework CoreのEntity Framework Core DesignおよびSQL Serverデータベースプロバイダーをインストールします。

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

7

Visual Studio Codeを使用していました。

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 add package Microsoft.EntityFrameworkCore.Design -v 1.1

Visual Studio

インストールパッケージMicrosoft.EntityFrameworkCore.Design -v 1.1


1
これは実際に機能します。これが質問に対する最良の答えです。ありがとう@Krishna
penderi

6

プロジェクト-> ManageNugetPackages->参照->「Microsoft.EntityFrameworkCore.SqlServer」を検索して、インストールまたは更新します。


4

Winによるトップスコアの回答で述べたように、Microsoft.EntityFrameworkCore.SqlServer NuGetパッケージをインストールする必要がある場合がありますが、この質問では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コアWebアプリケーションがusingステートメントを使用している場合は、このメタパッケージが表示されます。

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

Microsoft.EntityFrameworkCore.SqlServerは、このメタパッケージに含まれています。したがって、Startup.csに追加する必要があるのは次のとおりです。

using Microsoft.EntityFrameworkCore;


3

これは、Microsoft.EntityFrameworkCore.SqlServer.Designへのプロジェクト参照を追加することで解決できると思います。

Install-Package Microsoft.EntityFrameworkCore.SqlServer.Design

Microsoft.EntityFrameworkCore.SqlServerはプロジェクトに直接インストールされませんでしたが、.Designパッケージはそれを前提条件としてインストールします。


推移的な依存関係として必要なプロジェクトをもたらす不要なパッケージのインストールは、問題の解決策ではありません。
2017年

パッケージは不要だと思いますが、まったく同じ問題が発生したときにプロジェクトが修正されました。
Andrew S

そのパッケージは、現在の質問には不要です。別の問題では必要になる場合がありますが、これは必要ありません。
2017年

今日の7月27日の時点で、Microsoft.EntityFrameworkCore.SqlServerパッケージのみをインストールでき、問題を解決します
danfer

3
2018年2月5日の時点で、Microsoft.EntityFrameworkCore.SqlServer.Designパッケージを追加する必要があります。これは、ASP.NET Core 2.0.1 Webプロジェクトを使用して観察されました。
ルーシ

3

私にとってこの問題はVisual Studio Codeで発生し、2つのステップで修正できました:

  1. 手動で追加 using Microsoft.EntityFrameworkCore;
  2. dotnet build端末で実行しています。

3

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

最初に追加 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

この問題は、EFCoreでのCastle Proxyの使用に関連しています。


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

この問題を簡単に修正する方法

エラーメッセージ:
ここに画像の説明を入力してください

解決策:
NuGetで「microsoft.entityframeworkcore.sqlserver」をインストールする
ここに画像の説明を入力してください

修繕 :
ここに画像の説明を入力してください

PS:「using Microsoft.EntityFrameworkCore;」のコンテンツでEFを使用していることを確認してください。 ここに画像の説明を入力してください


0

asp.netコアバージョン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パッケージを追加していないようですが、追加したはずだと思っていましたが、1つずつ確認してください。


0

現在Entity Framework Core 3.1.3で作業しています。上記の解決策のどれも私の問題を修正しませんでした。

ただし、プロジェクトにパッケージMicrosoft.EntityFrameworkCore.Proxiesをインストールすると、問題が解決しました。これで、DBContextオプションを設定するときにUseLazyLoadingProxies()メソッドの呼び出しにアクセスできます。

これが誰かを助けることを願っています。次の記事を参照してください。

EF Coreでの遅延読み込み


0

インストールパッケージ:

**Microsoft.EntityFrameworkCore.SqlServer**

次に、クラスのトップを追加します。

**Microsoft.EntityFrameworkCore;**

それは私のために働いた


0

私はラインを使わなければなりませんでした

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

Startup.csのConfigureServicesメソッド


0

次のコードをhttps://github.com/aspnet/Docs/tree/master/aspnetcore/tutorials/first-web-api/sample/TodoApiからTodoApi.csprojにコピーすると、同様の問題が解決しました。

<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が含まれています


-1

NuGetパッケージをインストールする Microsoft.EntityFrameworkCore.SqlServerこの問題を解決するには、を。

コアバージョン3.1を使用しています


2
この回答はすでに2017-03-29に提供されています。もう一度繰り返す必要はありません
トーマスウェラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.