0

DB を SQL 2005 のインスタンスから新しい SQL 2008r2 サーバーに移動しました。アプリの接続文字列を新しいデータベースを指すように変更し、ProviderManifestToken を 2005 年から 2008 年に変更しました。データベースから既存の edmx モデルにエンティティを追加しようとするまで、すべてが正常に機能していました。「データベースからモデルを更新」ウィザードを使用して、テーブルを edmx ダイアグラムに追加しています。テーブルはダイアグラムに表示されますが、関連付けや外部キーがインポートされているのは一部のみです。接続文字列を切り替えて古い 2005 sql インスタンスを指すようにすると、すべてが正しくインポートされ、関連付けが存在します。必要に応じて、追加の詳細情報を提供させていただきます。これにはまったくパターンが見つかりません。何を与える?

更新: 新しいプロジェクトを作成し、edmx を追加し、それを 2008r2 db インスタンスにポイントし、関連付けがあることがわかっているテーブルを選択しましたが、デザイナーは関連付けを取得できませんでした。EF を機能させるために SQL サーバーにインストールする必要があるものはありますか?

4

2 に答える 2

4

今のところ機能しています。web.config から接続文字列を削除し、[データベースからモデルを更新] を使用し、[新しい接続の追加] ダイアログを使用して新しいサーバー上のデータベースを指すようにすると、動作するように見えました。これが機能しなくなった場合は、投稿し直します。

更新: 2 つの問題があったことがわかりました。2 つ目は、DB 内のテーブルの 1 つに、同じ列に 2 つのほぼ同一の冗長インデックスがあったことです。クラスター化された PK インデックスと、クラスター化されていない一意のインデックス。したがって、このテーブルを指す外部キーを作成するたびに、データベースは一意の非クラスター化インデックスを選択して制約を適用していました (理由はわかりません)。しかし、Entity Framework はそれを好まず、外部キーの関連付けを作成したり認識したりしませんでした。余分な非クラスター化インデックスを削除し、すべての外部キーを再作成して、それらがクラスター化インデックスを指すようにする必要がありました。それが完了したら、データベースからモデルを更新すると、すべての関連付けが存在しました。

外部キーが使用していたインデックスを確認するために使用した SQL クエリは次のとおりです 。問題の FKSELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C ORDER BY CONSTRAINT_NAMEUNIQUE_CONSTRAINT_NAME列は、クラスター化された PK を指している必要があります。

于 2012-06-04T13:41:50.153 に答える
0

データベースを 2008 Server にどのように移動しましたか? 関係/制約の一部またはすべてが移行されていないようです。これで、2008 年のデータベースを参照したときに関連付けが表示されない理由が説明できます。

于 2012-06-01T16:03:45.997 に答える