NugetでEF6をダウンロードして私のプロジェクトを実行しようとすると、次のエラーが返されます。
不変名 'System.Data.SqlClient'を持つADO.NETプロバイダーのEntity Frameworkプロバイダーが見つかりませんでした。プロバイダがアプリケーション設定ファイルの「entityFramework」セクションに登録されていることを確認してください。詳細については、 http://go.Microsoft.com/fwlink/?LinkId=260882 を参照してください。
私はちょうど同じ問題に遭遇しました、そしてそれはNuGetパッケージマネージャからインストールされたけれどもEntityFrameworkのように見えますプロジェクトに正しくインストールされませんでした。
私は パッケージマネージャコンソール で次のコマンドを実行することでそれを修正することができました。
PM> Install-Package EntityFramework
クラスライブラリプロジェクトにEFを追加しました。また、それを参照するプロジェクト(コンソールアプリ、Webサイトなど)に追加する必要もあります。
コンソールアプリケーションにEntity Frameworkをインストールする必要はありません。アセンブリEntityFramework.SqlServer.dllへの参照を追加するだけです。このアセンブリをEntity Frameworkを使用するクラスライブラリプロジェクトからLIBフォルダーにコピーして、それへの参照を追加できます。
要約すれば:
助けになれば幸いです。
このメッセージは、「EntityFramework.SqlServer.dll」を含めることを忘れた場合にも表示されます。
EF6で新しく追加されたファイルのようです。当初、私はそれを私のマージモジュールに含めていなかったし、ここに挙げた問題に出くわした。
ホストプロジェクトにEntityFramework.SqlServerを追加する代わりに、モデル/エンティティプロジェクトからこのように静的参照を確実にすることができます。
static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
これにより、ビルドプロセスにアセンブリとホストプロジェクトが含まれます。
私のブログでの詳細情報 http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
Nuget
を介してEntity Framework 6をインストールする場合。 EntityFramework.SqlServerは他の実行ファイルを見逃すことがあります。そのプロジェクトにNuget
パッケージを追加するだけです。
上記のテストプロジェクトではうまくいかないことがあります
Test Projectでこの問題を解決するには、このメソッドをTest Project内に配置するだけです。
public void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
このメソッドは呼び出されることはありませんが、私の観察によると、コンパイラはすべての「不要な」アセンブリを削除し、EntityFramework.SqlServer
を使用せずにテストは失敗します。
この機能を追加
private void FixEfProviderServicesProblem()
ライブラリクラスのデータベースコンテキストクラスに追加し、不足しているDLL EntityFramework.SqlServer.dllを正しい場所にコピーします。
namespace a.b.c
{
using System.Data.Entity;
public partial class WorkflowDBContext : DbContext
{
public WorkflowDBContext()
: base("name=WorkflowDBConnStr")
{
}
public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
public virtual DbSet<TaskItem> TaskItems { get; set; }
public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
private void FixEfProviderServicesProblem()
{
// The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
// for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.
// Make sure the provider Assembly is available to the running application.
// See http://go.Microsoft.com/fwlink/?LinkId=260882 for more information.
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
}
。
これらのどれも私のために働きませんでした。私は 他のstackoverflow問題 で解決策を見つけました。簡単に参照できるようにここに追加します。
参照を作成する必要があるので、それはアプリケーションパスにコピーされます。後で実行時に参照されるためです。ですから、ファイルをコピーする必要はありません。
private volatile Type _dependency;
public MyClass()
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
SQL Server Compact 4.0でEntity Framework 6を使用しているときに同じエラーが発生しました。 EF6用の Entity Framework Providers に関するMSDNの記事は役に立ちました。 NuGetパッケージも自動的にconfigファイルに登録を追加するため、Package Managerコンソールでそれぞれのプロバイダコマンドをnugetパッケージとして実行すると問題が解決する場合があります。問題を解決するためにPM> Install-Package EntityFramework.SqlServerCompact
を実行しました。
テストプロジェクトでエラーが発生したときの最も良い解決策は、テストクラスを次のように修飾することです。
[DeploymentItem("EntityFramework.SqlServer.dll")]
それぞれが異なるプロジェクトにあるWebサービスのセット、およびそれらのサービスのいくつかのための統合テストを含む別々のプロジェクトを扱うときに、今日この問題を調べてください。
私はEF 5でこのセットアップをしばらく使っていましたが、統合テストプロジェクトからEFへの参照を含める必要はありませんでした。
EF6にアップグレードした後は、EF6への参照を統合テストプロジェクトに含める必要があるようです。( user3004275 で指摘したように) 。
あなたが同じ問題に直面している徴候:
3番目のポイントはしばらくの間私をやめさせたことです、そしてなぜ私はこれが必要とされるのかまだわかりません。私の統合テストプロジェクトでEF6に参照を追加することは、いずれにせよそれを解決しました...
Entity Frameworkが使用されているプロジェクトを参照するスタートアッププロジェクトには、そのbinフォルダーに次の2つのアセンブリが必要です。
スタートアッププロジェクトの.configファイルの<section>
に<configSections>
を追加すると、そのbinディレクトリで最初のアセンブリが利用可能になります。これをEntity Frameworkプロジェクトの.configファイルからコピーできます。
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.Microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
2番目の.dllをbinフォルダーで使用可能にするには、実用的ではありませんが、Entity Frameworkプロジェクトのbinフォルダーから手動でコピーを作成できます。より良い方法は、Entity Frameworkプロジェクトのビルド後のイベントに次の行を追加することです。これにより、プロセスが自動化されます。
cd $(ProjectDir)
xcopy /y bin\Debug\EntityFramework.SqlServer.dll ..\{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}\bin\Debug\
私は今日この問題に遭遇したところです。テスト用のEF63 NuGetパッケージおよびコンソールアプリケーションを含むデータリポジトリクラスライブラリがあります。これらはクラスライブラリプロジェクトのみを参照しています。私はクラスライブラリのBin\DebugフォルダからコンソールアプリケーションのBin\DebugフォルダにEntityFramework.SqlServer.dllをコピーする非常に単純なビルド後コマンドを作成し、問題を解決しました。コンソールアプリケーションの.configファイルにentityFrameworkセクションを追加することを忘れないでください。
下記をapp.configに追加してください。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
BINフォルダを削除すると私のためにそれをやった
EntityFramework.SqlServer.dllアセンブリへの静的参照を強制する必要がありますが、ダミーコードを配置する代わりに、より美しい方法でこれを実行できます。 :
すでにDbConfigurationクラスがある場合
public class MyConfiguration : DbConfiguration
{
public MyConfiguration()
{
this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
}
DbConfigurationクラスがない場合は、アプリの起動時に次のコードを追加する必要があります(EFが使用される前)。
static MyContext()
{
DbConfiguration.Loaded += (sender, e) =>
e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
Nugetを使用してEntity Frameworkを再インストールしました。そして以下のリンクに書かれた指示に従ってください: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html
私は問題が解決すると思います。
私は1つのコンソールアプリケーションとクラスライブラリを持っていました。クラスライブラリでEntity Data Modelを作成し([クラスライブラリ]> [追加]> [新しい項目]> [データ]> [ADO.NET Entity Data Model 6.0]を右クリック)、コンソールアプリケーション内に参照を置きます。それで、あなたはクラスライブラリへの参照を持っているコンソールアプリケーションとあなたがEFモデルを持っているクラスライブラリの中にいます。テーブルからレコードを取得しようとしたときに同じエラーが発生しました。
次の手順でこの問題を解決しました。
それが私がしなければならなかったすべてであり、すべてが完璧に機能しました。
お役に立てば幸いです。
また、起動プロジェクトがdbcontext(または関連するapp.config)を含むプロジェクトであることを確認してください。 Mineは必要な設定をすべて持っていないWebサイトプロジェクトを立ち上げようとしていました。
私は同じエラーがあります。 dbContextを使って自分のモデルのどれかに問い合わせをしたり、以下のようなリストを取得したときに初めて起こるのは奇妙なことです。
var results = _dbContext.MyModel.ToList();
Entity Frameworkを再インストールしようとしました。正しく参照してください。
幸いなことに、NugetでALL
ソリューションをチェックしてから、すべてを更新するか、everything
が同じバージョンであることを確認してみました。2つのプロジェクトがWebプロジェクトで異なるEFバージョンを持っているためです。そしてそれはうまくいきます。エラーはなくなりました。
これは、すべてのソリューションでNugetを管理する方法のスクリーンショットです。
みんな私はあなたの注意が必要です2 dll EntityFramework.dllとEntityFramework.SqlServer.dllはDataAccessレイヤライブラリですそしてそれはビューやその他のlayer.itでそれらを使用することは論理的ではありませんがそれは論理的ではありません。
論理的な方法は、enitiess属性を削除してFluent APIに置き換えることです。これが本当の解決策です
system.Data.SqlClientがシステムにインストールされているかどうか、およびそれが参照されているかどうかを最初に確認する人は誰もいないようです。
私はSystem.Data.SqlClientをインストールしてapp.Configに新しいプロバイダーを追加することで私の問題を解決しました
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6"/>
私は上記のほとんどすべてを試しましたが、何もうまくいきませんでした。
Default ProjectのEntityFramework
プロパティとEntityFramework.SqlServer
プロパティのCopy Local
に参照されているDLLをTrue
に設定したときだけ、それは動き始めました!
YourModel.edmxファイルを展開し、YourModel.Context.ttの下のYourModel.Context.csクラスを開きます。
Usingセクションに次の行を追加したところ、エラーが修正されました。
sqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServicesを使用します。
ファイルが自動生成されるたびに、この行をファイルに追加する必要があります。
メッセージが示すように、プロバイダーSystem.Data.SqlClientを追加する必要があるということは、2つのDLLを持つEntityFrameworkのnugetパッケージをインストールする必要がある理由ですが、コンソールアプリケーションのみを開発している場合はEntityFramework.SqlServer.dllの参照を追加するだけです。
注:ModelからDatabase Sqlを生成しているときにこの問題が発生しました。それはすべてのテーブルをうまく作成しましたが、変更をエクスポートしませんでした。注意すべきことは、このエラーはDDL生成テンプレートをSSDLtoSQL10として使用してSQLをエクスポートしようとしたときに生成されることです。ここでMySQL接続を期待しているので、ModelプロパティのDDL Generation Template SSDLtoMySQLのドロップダウンから必ず選択するようにしてください。この一日を過ごした!
私は同じ例外を投げました。含めた
using System.Data;
using System.Data.Entity;
そして、すべてが再び機能するようになりました。
私の場合、Resharperが問題の原因となったいくつかの変更を変更したと思うので、すべてが適切に機能していたのに突然機能しなくなりました。私のプロジェクトは、データ層、サービス層、そしてプレゼンテーション層に分けられました。 Entity Frameworkをデータ層にインストールして参照しましたが、それでもエラーは解消されませんでした。アンインストールと再インストールもうまくいきませんでした。最後に、でデータ層をスタートアッププロジェクトにし、移行を行い、データベースを更新し、スタートアッププロジェクトを自分のプレゼンテーション層に戻しました。
私は同じ問題を抱えていた、ちょうど私のテストプロジェクトにDBContextを含んでいたプロジェクトからApp Configファイルをコピーした
Azure上でCEデータベースからSqlサーバーに移行するときに、関連する問題がありました。これを解決するために4時間を無駄にしました。うまくいけば、これは誰かが同じような運命を救うかもしれません。私にとっては、私のpackages.configファイルにSqlCEへの参照がありました。それを削除することは私の問題全体を解決し、私が移行を使用することを可能にしました。不必要に複雑な設定と設定の問題を抱えた別の技術のYay Microsoft。
EntityFramework.SqlServer.dllへの参照が不足しています。 SQL Serverを使用するEntityFrameworkプロジェクトの場合、参照する必要がある2つのファイルはEntityFramework.SqlServer.dllとEntityFramework.dllです。
Web /コンソールプロジェクトにEntityFrameworkパッケージをインストールするだけです。これであなたの設定ファイルにセクションが追加されます。