1

私は曲がりくねったイライラする道を経てこのジレンマにたどり着きましたが、今いるところから始めましょう。情報については、VS2010、Silverlight 5、および最新バージョンの Silverlight と RIA ツールキット、SDK などを使用しています。

データベースにビューがあります (実際にはインデックス付きビューになっていますが、動作に違いはありません)。テスト目的で (これには私の正気をテストすることも含まれます)、ビューをテーブルとして複製し (つまり、同一の列名と定義)、ビューのすべての行をテーブルに挿入しました。したがって、Query Analyzer でビューまたはテーブルから SELECT * を実行すると、同じ結果が得られます。ここまでは順調ですね。

Silverlight ビジネス アプリケーション Web プロジェクトで、すべてのオブジェクトを含む EDF モデルを作成します。

モデルに基づいてドメイン サービスを作成すると、View と Table の両方の ContextTypes とメタデータ、および関連する Query オブジェクトが作成されます。

テーブル クエリを使用して Silverlight プロジェクトに Silverlight ListBox を設定すると、テーブル内のすべてのデータが返されます。

ビュー クエリを介して同じ ListBox にデータを入力すると、1 行のみが返されます。常にコレクションの最初の行が返されますが、順序は異なります。実際、デバッガーを介して内部の仕組みを詳しく調べると、サービスで ObjectContext クエリを実行すると、正しい行数の結果セットが返されますが、すべての行は同じです! 昇順で並べると、最初の行の n コピーが取得され、降順で最後の行の n コピーが取得されます。

誰かが私をここで悲惨な状態から解放し、ビューが機能しない理由を教えてもらえますか?

アデ

4

1 に答える 1

2

わかりました、それは予測できました - フォーラムで質問をするたびに、回答が殺到するのを待っている間に答えに出くわします!

メタデータ ファイルと model.designer ファイルを調べて、すべての「ビュー」と「テーブル」のクラス/メソッドの定義などが同一であることを確認したにもかかわらず、ビューとテーブル クエリの動作に苛立たしい違いが見られました。つまり、問題はデータベースによって引き起こされたに違いありませんよね?

案の定、ビューの「同一の」テーブル バージョンを作成したときに、NOT NULL 列を作成していることに気づきませんでした。ビューに一意のキー列を作成するために SELECT NEWID() を使用していたにもかかわらず、データベースはビューの ID 列が NULLABLE であると主張し、明らかにこれが問題の原因でした。

記憶域を節約するために、NEWID() の使用から ROW_NUMBER() の使用に切り替えてキー列を作成しましたが、それでも「NULLABLE」プロパティの問題がありました。だから私はそれをに変更しました

SELECT ISNULL(ROW_NUMBER() (オーバー...) , -1)

ID列の場合、最後にビューの列が作成されました NOT NULL! NEWID() も ROW_NUMBER() も NULL 出力を生成することはできませんが、SQL Server の手を握って、ISNULL 演算子を使用して安心させる必要があるようです。

これを実行し、モデルとサービス ファイルを削除/再作成すると、[Key()] プロパティなどを手動で追加することなく、すべてが輝かしいテクニカラー ライフに突入しました。問題はずっとデータベースにあり、モデル/サービス/メタデータの定義にはありませんでした。

これが誰かの時間を節約することを願っています。あとは、2 日前に開始した元のストアド プロシージャ メソッドが機能しない理由を突き止めるだけですが、少なくともヒントは得られました。

アデ

于 2012-11-20T15:52:04.837 に答える