これは控えめに言っても私を少しイライラさせました...
サービスレイヤープロジェクトをv.nextにアップグレードしており、その過程ですべてのLinqtoSqlモデルをEntityFrameworkに「アップグレード」しています。これまでに4つのデータベースを作成し、現在テストを実行しています-テストはエラーで失敗します
System.Data.MetadataException:指定されたスキーマが無効です。エラー:DB.WebDB.ssdl(2,84):エラー0169:すべてのSSDLアーティファクトは同じプロバイダーをターゲットにする必要があります。ProviderManifestToken '2008'は、以前に検出された'2005'とは異なります。
グーグルを実行すると、これは多くの場合、異なるdev /livesqlサーバーのバージョンが原因であることがわかります。
私のシナリオは異なりますが、異なるバージョン(2005、2008、および2008 R2)を実行している複数のライブデータベースサーバーがあり、異なるEDMXを使用してそれらすべてと通信できる必要があります。
このSO:単一のASP.NETアプリケーションでEntityFrameworkを使用するSQLServerの複数のバージョンでは、1つの解決策は、異なるバージョンのEDMXを異なるアセンブリ(つまり、2005および2008バージョン)に分割することであるように思われます。おそらく別の解決策はProviderManifestToken
、2008年にソースされたデータベースのmyを強制すること2005
です。
しかし、私にとって、1つのEDMXが他のすべてを壊す可能性のあるEFの動作の癖を満たすためだけに、異なるアセンブリを作成する必要があるという考えはばかげています-私にとって、個別のアセンブリはアーキテクチャ上の決定です。同様に、EDMXファイルをハッキングして2008データベースをダウングレードすることも望ましくありません。特に、次の「データベースから更新...」コマンドでファイルを元に戻す場合はなおさらです。
誰かが別の解決策を手に入れましたか?