web-dev-qa-db-ja.com

EF 6 System.Data.Objects.ObjectContextエラー

最近、エンティティフレームワーク5からエンティティフレームワーク6 Alpha 2にアップグレードしましたが、次のエラーが表示されます。

メソッドが見つかりません: 'System.Data.Objects.ObjectContext System.Data.Entity.Infrastructure.IObjectContextAdapter.get_ObjectContext()'。

これは私が電話したときにヒットしています

if (Membership.ValidateUser(model.UserName, model.Password)) {}

このエラーが発生する理由がわからない前に、これは正常に動作していました。助言がありますか?

34
Joe

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プロパティへの参照が存在する可能性がありますが、ほとんどの場合、独自のコードに存在します。エラーメッセージ(質問に含めなかった部分)は、エラーの原因を示しているはずです。

31
user743382

私にとって、これらを更新するには以下が有効でした:
using System.Data.Objects; --> using System.Data.Entity.Core.Objects;

using System.Data.Objects.DataClasses; --> using System.Data.Entity.Core.Objects.DataClasses;

21
piris

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のバグが埋められています。

EF6と互換性のないMicrosoft.AspNet.Providers.Core

14

プロバイダーの新しい2.0バージョン( http://www.nuget.org/packages/Microsoft.AspNet.Providers.Core/ )はEF6互換です(実際にはEF6でのみ動作します)。

5

非推奨としてマークされたNugetを介してインストールしたAspNetプロバイダーを削除することで、この問題を解決できました。これを行うと、Entity Frameworkもアンインストールされました。

次に、新しいAspNet Universal Providersをインストールし、次にEntity Framework 6を​​インストールしました。すべての問題が修正されました。

2
Eraph

これには、edmxファイルに関連付けられた古いバージョンがあります。

  • NugetでEFを再インストールする
  • .edmxファイルを削除し、テーブルで再作成します
1

私のために働いたのは次のことでした:

  1. Dll「Microsoft.AspNet.DataSource」を次のものでインストールします。

    PM>インストールパッケージMicrosoft.AspNet.EntityDataSource

  2. プロジェクトで「Microsoft.AspNet.DataSource.dll」を参照します。

  3. 次のusing宣言を追加しました。

    使用System.Data.Entity.Core.Metadata.Edm;

    system.Data.Entity.Core.Objectsを使用します。

    microsoft.AspNet.EntityDataSourceを使用します。

  4. 次のusing宣言を削除しました。

    using System.Data.Entity;

    system.Data.Metadata.Edmを使用します。

    system.Data.Objectsを使用します。

    system.Web.UI.WebControlsを使用します。

ほら、コードはコンパイルして動作しています。

1
Anytoe

これは、エンティティフレームワークが、マシンにインストールされているドットネットフレームワークライブラリでメソッドを見つけることができない場合に発生します。したがって、dotnet framework 4.5.2以降をインストールしてください。問題が修正されます。

1
swaraj

このリンクをチェック

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になります)。

1
TSN_Prasad

私にとっての迅速で簡単な修正は、問題のアセンブリ(非推奨)を削除し、新しいライブラリへの参照を追加することでした。コードは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;
<#
0
Anthony Mason