最近、エンティティフレームワーク5からエンティティフレームワーク6 Alpha 2にアップグレードしましたが、次のエラーが表示されます。
メソッドが見つかりません: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'。
これは私が電話したときにヒットしています
if (Membership.ValidateUser(model.UserName, model.Password)) {}
このエラーが発生する理由がわからない前に、これは正常に動作していました。助言がありますか?
EF 6にはSystem.Data.Objects.ObjectContext
がありません。 EF 6はObjectContext
を含むいくつかのタイプをSystem.Data.Entity.dll
からEntityFramework.dll
に移動し、名前空間を変更しました。このエラーが発生するという事実は、アプリケーションを再コンパイルしようとしておらず、単にEntityFramework.dll
を置き換えて、最善を望んでいることを示唆しています。それは機能しません。 EF 6を使用するには、コードを更新する必要があります。System.Data.Entity.dll
への参照を削除し、新しい型を参照するようにコードを更新する必要があります。
使用しているライブラリにIObjectContextAdapter.ObjectContext
プロパティへの参照が存在する可能性がありますが、ほとんどの場合、独自のコードに存在します。エラーメッセージ(質問に含めなかった部分)は、エラーの原因を示しているはずです。
私にとって、これらを更新するには以下が有効でした:using System.Data.Objects; --> using System.Data.Entity.Core.Objects;
using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;
EF 6
も使用しています。
パッケージのアンインストールの問題を解決できました Microsoft.AspNet.Providers.Core
v。1.2。代わりにバージョン1.1を使用しています。あなたが私のようでLocaDb
を使用している場合は、LocaDb
パッケージをアンインストールする必要があります。これは、そのパッケージに依存しているためです。もちろん、LocaDbを再インストールする必要があります...
Visual Studio内のNuGetパッケージマネージャーコンソールを使用して、v。1.1を取得できます。
Install-Package Microsoft.AspNet.Providers.Core -Version 1.1
この問題に関しては、Microsoft Connectのバグが埋められています。
プロバイダーの新しい2.0バージョン( http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/ )はEF6互換です(実際にはEF6でのみ動作します)。
非推奨としてマークされたNugetを介してインストールしたAspNetプロバイダーを削除することで、この問題を解決できました。これを行うと、Entity Frameworkもアンインストールされました。
次に、新しいAspNet Universal Providersをインストールし、次にEntity Framework 6をインストールしました。すべての問題が修正されました。
これには、edmxファイルに関連付けられた古いバージョンがあります。
私のために働いたのは次のことでした:
Dll「Microsoft.AspNet.DataSource」を次のものでインストールします。
PM>インストールパッケージMicrosoft.AspNet.EntityDataSource
プロジェクトで「Microsoft.AspNet.DataSource.dll」を参照します。
次のusing宣言を追加しました。
使用System.Data.Entity.Core.Metadata.Edm;
system.Data.Entity.Core.Objectsを使用します。
microsoft.AspNet.EntityDataSourceを使用します。
次のusing宣言を削除しました。
using System.Data.Entity;
system.Data.Metadata.Edmを使用します。
system.Data.Objectsを使用します。
system.Web.UI.WebControlsを使用します。
ほら、コードはコンパイルして動作しています。
これは、エンティティフレームワークが、マシンにインストールされているドットネットフレームワークライブラリでメソッドを見つけることができない場合に発生します。したがって、dotnet framework 4.5.2以降をインストールしてください。問題が修正されます。
このリンクをチェック
http://visualstudiomagazine.com/articles/2014/03/01/whats-new-in-entity-framework-6.aspx
EF 6.2を更新し、同じエラーを取得し、休閑地としての解決策を見つけました
System.Data。*名前空間への参照を含め、名前空間System.Data.EntityをSystem.Data.Entity.Coreに変更します(たとえば、System.Data.ObjectsはSystem.Data.Entity.Core.Objectsになります)。
私にとっての迅速で簡単な修正は、問題のアセンブリ(非推奨)を削除し、新しいライブラリへの参照を追加することでした。コードはContext.tt内で変更され、次のようになります。
if (container.FunctionImports.Any())
{
#>
using System.Data.Entity.Core.Objects; // The Assembly you need
using System.Linq;
<#
}
変更前は、次のように表示されていました。
if (container.FunctionImports.Any())
{
#>
using System.Data.Objects; // Error on compile
using System.Data.Objects.DataClasses; // Error on compile
using System.Linq;
<#