2009-06-30 12 views
11

SQL Server 2000,2005、および2008を使用するWebアプリケーションでEntity Frameworkを使用しています。新しいEDMXファイルを作成するときに、 2008年(最初に作成されたedmxのバージョン)error 0172: All SSDL artifacts must target the same provider. The Provider 'MyDatabase' is different from ' MyDatabase ' that was encountered earlier.コードのどこかで接続が2008年のデータストアに接続されていると思われ、SSDLファイルをチェックして別のProviderManifestToken値を確認​​すると、このエラーがスローされます。私は少し不満以上です。 EFはアプリケーションごとに1つのバージョンのSql Serverでしか動作しないとは想像もつきません。私は設定や回避策が必要であると確信しています。単一のWebアプリケーション内で異なるバージョンのSQL ServerとEntity Frameworkを使用するソリューションはありますか?1つのASP.NETアプリケーションでEntity Frameworkを使用するSQL Serverの複数のバージョン

+0

重要な点は、sql 2000からsql 2008への移行の途中で、接続文字列を変更して「データベースからモデルを更新する」という奇妙なことに、すべてのSSDLをProviderManifestToken = "2005"を使用するとアプリが動作します。 –

+0

私はこの問題への答えも探しています。私が今までに見つけた唯一の関連するGoogleの結果は、どんな深みにも入り込まない。 – Cogwheel

答えて

24

edmxを別のアセンブリに入れることでこれを達成できました。

var oneDb = new Entities2000(); 
var otherDb = new Entities2005(); 

var results = from one in oneDb.SomeSet 
       join other in otherDb.OtherSet 
        on one.Property equals other.Property 
       select new { 
        SomeProp = one.SomeProp, 
        OtherProp = other.OtherProp 
       }; 
+0

これはどこで動作するのか分かります。私が見ていた問題は、それが私の環境で働かない理由でした。当時の唯一の回避策は、すべてのProviderManifestTokenを同じバージョンに設定することでした。この時点から、私はすべてのDBSをMSSQL 2008に移行しました。なぜこれが私の元の質問に答えることができないのでしょうか、それは容認できる回避策です。 –

+0

私は同じ問題がありました。それで、私は '@Cogwheel - Matthew Orlando'の提案をすべて実装しました。SQL Server 2005と2008の両方で完璧に機能します。注:diff名を使用してSQL 2008へのデータアクセスのための新しいプロジェクトを作成し、対応するSQLバージョン用の 'ProviderManifestToken'を修正し、2番目のプロジェクトの名前空間を新しいアセンブリ名に従って置き換えました(必要かどうかわかりません)。そして今私は幸せです。 – mastak

+0

最初にコードを使用する際にこれを行う方法に関する考えはありますか? –

5

このリンクは、私を助けた:そして、接続文字列では、すべての私も(主張に反して、私は他のソースで見つかった)2つのエンティティモデル間の結合を実行することができますres://*/...

res://NameOfAssembly/...で、例えば、交換SQLサーバー2005と2008に違いがあったときの問題を解決してください。http://kkryczka.wordpress.com/2011/01/03/all-ssdl-artifacts-must-target-the-same-provider-the-providermanifesttoken-2008-is-different-from-2005-that-was-encountered-earlier/

.edmxファイルを右クリックし、[XMLエディタで開く]を選択します。 オープンEntity Frameworkの.edmxファイル:

変更ProviderManifestToken 2008:

はMicrosoftにとってそのA既知の問題のように見えます。

+0

ありがとうございます。私は本当にこれで苦労しました。もう1人の開発者は、別の開発者のプロジェクトでこのプロジェクトに追加し続けました。良い記事 –

+0

私のケースでは、1つのソリューションに3つのプロジェクトがあり、プロジェクトAのいずれかでProviderManifestTokenを変更しましたが、これはプロジェクトBを同じソリューションから実行することができませんでした。 – franklins

+0

私の場合、2008 tot 2012を変更しなければならず、ファイルの最後にがあります。 これをFalseに変更すると機能しました。 – Martin

関連する問題