アプリケーションと統合する SQL ビューがあります。私は今までEntity Frameworkを使用してきました。しかし問題は、ビューを Entity Framework に追加すると、ビューがテーブルとして扱われるようになることです。
私が本当に知りたいのは、何かが欠けているのでしょうか? また、Nhibernate を使用すると、この問題は解決しますか? ビューをビューのみとして扱いますか?
このビューは、複数の結合と集計を持つ非常に複雑なクエリです。そのため、ビューを使用しています。
アプリケーションと統合する SQL ビューがあります。私は今までEntity Frameworkを使用してきました。しかし問題は、ビューを Entity Framework に追加すると、ビューがテーブルとして扱われるようになることです。
私が本当に知りたいのは、何かが欠けているのでしょうか? また、Nhibernate を使用すると、この問題は解決しますか? ビューをビューのみとして扱いますか?
このビューは、複数の結合と集計を持つ非常に複雑なクエリです。そのため、ビューを使用しています。
しかし問題は、ビューを Entity Framework に追加すると、ビューがテーブルとして扱われるようになることです。
いいえ、そうではありません。ウィザード (EDMX デザイナー) を使用してモデルにビューを追加すると、ビューは内部的に読み取り専用エンティティを作成する定義クエリとして処理されます。エンティティ レベル (概念モデル) では、別のエンティティ/クラスであるため違いはわかりませんが、そのクラスのインスタンスに変更を加えて保存しようとすると、例外が発生します (ストアド プロシージャをマップするか、そのエンティティの操作を挿入、更新、および削除するためのカスタム SQL コマンド)。
編集:
データベース ビュー、およびストアド プロシージャや SQL 関数などのその他のデータベース固有の機能は、データベースを最初に使用するシナリオ (デザイナーでデータベースからモデルを更新する場合) にのみ使用できます。
[モデルからデータベースを生成]を使用するのは、VS に「これが私のモデルであり、それを格納するデータベースが必要です」と伝えるモデルの最初のシナリオです。まず、概念モデルからの情報のみが使用されます (元のマッピングとデータベースの説明は、このコマンドを実行するたびに新しいものに置き換えられるため、元のデータベースへのマッピングも壊れる可能性があります)。クラスをビューにマップする必要があることを認識せず、さらにビューを作成する方法がわからないため、データベース固有の機能を作成できません (元のビューからのクエリは不明です)。
VS に強制的にビューを作成させることはできますが、ビューに SQL 作成スクリプトを何らかの方法で提供する必要がある T4 テンプレートでは多くの作業が必要です。