4

私は ASPNET と MVC 4 にまったく慣れていないので、これは簡単な質問かもしれません。ただし、適切にグーグルで答えを見つけることができませんでした。単純に販売情報を表示したいのですが、表示するだけで済みます。基になるテーブルから挿入、更新、または削除する必要はありません。

データを取得する必要がある SQL Server テーブルは、CurrentSales、SalesPlans、AverageSales の 3 つです。このための VIEW を作成し、一意のクラスター化インデックスを配置しました。いくつかの外部結合が含まれていますが、ありそうもない NULL 値を処理するロジックがあります。

MODELS に移動し、新しい ADO.NET Entity Data Model を追加して、ビューをモデルに追加します。戻ってきて、「テーブル/ビュー 'vw_FullView' には主キーが定義されていません。キーは推測され、定義は読み取り専用のテーブル/ビューとして作成されました。」と表示されます。このモデルとエンティティからコントローラー クラスを作成すると、Web サイトを読み込んだときにビューにデータが表示されません。

ただし、モデル テーブルとして機能する適切な主キーを持つ完全に空のテーブルを作成し、必要なデータを取得するために (関数のインポートとして) ストアド プロシージャ使用すると、すべてが正常に機能します。

これは明らかに、これを処理する正しい方法ではありません。ビューから強く型付けされたモデルを作成する方法はありますか? この空白のテーブルでシステムを「だます」必要があるのではなく、ASP.NET の Controller オブジェクトと View オブジェクトをモデルの SQL ビューから適切に自動生成することをお勧めします。

よろしくお願いします。

4

3 に答える 3

4

Entity Framework はビューがあまり好きではありません。ビューの主キーが何であるかを判断できないため、null 非許容フィールドは複合主キーの一部であると想定します。

一般に、Entity Framework を使用するときはビューを避けます。ビューが行うことを行う linq クエリを作成し、代わりにそれを使用します。

于 2013-03-11T21:19:14.847 に答える
1

ビューは、エンティティまたはエンティティの組み合わせの単なる投影です。ビューに実際のエンティティがないため、エンティティ フレームワークはデフォルトで読み取り専用アクセスのみを許可します。つまり、ET は変更を追跡できません。

simmdan は実際に、MSDN フォーラムでこれを回避する方法を説明してくれました。

基本的に、Mystere Man が既に指摘したように、Entity Framework を使用する場合、最も簡単な方法は、linq によって結合およびフィルタリングされた実際のエンティティを使用してビューを複製することです。

于 2013-03-11T21:26:00.913 に答える