• 締切済み

asp.net MVC

asp.net MVC環境でもENTITY FRAMEWORK POCOについて質問です。 エンティティ・クラス(POCO)はデータベースのテーブルからしか定義(リンク)できない のでしょうか。 たとえばDBのビューをエンティティ・クラスとして定義はできないのでしょうか。 あるテーブルのあるフィールドをグループ化しSUMしたビューをエンティティ・クラスとして 定義したかったのです。 仮にできないとすると、LINQ to SQL などで加工(グループ化)するしかないのでしょうか。 もし、それしかできないとすると扱いずらさと、効率の悪さを感じます。 自分が分かっておらず方法があれば良いと思い、質問させていただきました。 ご教授よろしくお願いします。

みんなの回答

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.2

#1です。 Entity Frameworkのバージョンが4.5以上で、MS-SQL Serverであれば、スキーマもDBも自動生成されます。 自分の経験では、4.3以下だとうまくいかなかったような。。すいません。ちょっと記憶にありません。

vespha
質問者

お礼

たびたびの回答ありがとうございます。 Verを最新の状態にして再度、確認いたしました。 結果うまくDBビューをリンクすることができました。 現状では4.1を利用していました。 バージョンのせいか、もしくは何度かDBやエンティティクラスを確認するために 変更したので、そのせいでうまくいかないのか原因ははっきりとはしませんが 最終的にうまくいきました。 アドバイスに感謝です。 すばやいレスポンスでの返答ありがとうございました。

  • shockatz
  • ベストアンサー率80% (153/191)
回答No.1

Entity Frameworkで「データベース・ファースト」なエンティティ設定を行う場合、インポートするデータベースの項目に、「テーブル」「ビュー」「ストアドプロシージャ」という項目は設定されています。 (ビューへの「書き戻し」は現状ではサポートされていないはずですが、取得系ならば問題なく使えます) また、「スキーマ・ファースト」で、DBとエンティティ定義を自動生成したり、「コード・ファースト」でスキーマとDBを生成する手法も一般的です。 「スキーマ・ファースト」や「コード・ファースト」な設計技法であれば、テーブルのm:nスキーマ定義なども簡単に定義できますし。 質問者さんはおそらく、ASP.NET MVCのビューごとにDBビューを生成して、DBへのリレーショナルナなアクセスをウィザードで統御したいとお考えだと思います。 個人的には、最近はLINQを代表とするO/Rマッパーが非常に柔軟になったり、「匿名クラス」の利用が一般的になったことで、中小規模のWebアプリケーションで、ビューはほとんど使用しなくなりました。 LINQやAutoMapperなどのマッッピングテクノロジーを習得されることを強くお勧めします。 Webアプリケーションが要求する、多種多様なビューモデルをDB側で吸収するのは至難の技であり、トリッキーなデータ構成を避け、メンテナンスのしやすい、正しく正規化されたDBを運用するためには、O/Rマッピングは避けて通れない技術だと思いますよ。

vespha
質問者

お礼

ありがとうございました。 大変、参考になりました。O/Rマッピングについて勉強したいと思います。 また、すみません。 再度、確認したいのですがコード・ファーストでも定義したエンティティクラスに DBビューをリンクできるのでしょうか。 投稿する前に試していたのですが、エラーとなり、うまくできませんでした。 環境 Visual Web Developer 2010 Express Sql Server2005 何度もすみません。ぜひ、アドバイスいただければと思います。

関連するQ&A

  • asp.net mvcを利用する場合の複数テーブルの扱い方

    お世話になります。 asp.netオフィシャルサイト上のデモを見て、asp.net mvcを使って、アプリを作りたいんですが、DBにテーブルが複数ある場合、複数のテーブルからデータを抽出し、viewに表示する方法が分からなくて困ってます。 ご存知の方いらっしゃらましたら教えてください。 よろしくお願いします。

  • EF(コードファースト)のコンテキストクラスの定義

    http://www.atmarkit.co.jp/fdotnet/ef4basic/ef4codefirst01/ef4codefirst01_02.html こちらを参考にしてASP.net MVC + Entity Framework 4.1(コードファースト) のWebシステムを作ろうと考えています。 既存のDBを使用することを考えていて、DBに含まれるテーブル数は100弱となります。 それぞれのテーブルに対応するエンティティクラスを100弱定義し、これらを 登録するコンテキストクラスを作成しようと考えたのですが、 1.コンテキストクラスも100弱定義し、web.configの接続定義も100弱定義する。 2.コンテキストクラスは1つ定義し、その中に100弱のエンティティの定義をする。   web.configの接続定義は1つ定義する 上記の1、2のいずれが方向性として正しいものでしょうか? 2のほうがすっきりするとは思いますが、データ取得時にコンテキスト・クラスのインスタンスを 生成する際、余計なエンティティ定義も読み込まれるためパフォーマンスが悪いような気もします。 無視していいほど軽いのであれば、間違いなく2の方法を取るのですが…。

  • 【ASP.NET MVC3】共通ビュークラス

    いつも大変にお世話になっています。 ASP.NET MVC3で作成しているシステムで、すべてのビューに、共通のプロパティを用意したいと考えております。 以前のASP.NETでは、System.Web.UI.Page を継承したカスタムクラスを継承していました。 public MyCustomPage : System.Web.UI.Page {  // 共通のプロパティやメソッド } public class Index : MyCustomPage {  public page_load(Object o, EventArgs e){ // ページロード処理 } }; このような継承定義をビューのクラスで行いたく思います。 MVC3のビューで、たとえば、MyViewModelというビューモデルを埋め込んだ、以下のようなクラスは、どのやって定義したら良いのでしょう? @inherits MyCustomView<MyViewModel> 土曜の夜だというのに、まだ帰れません(泣 何とぞよろしくお願い致します。

  • 【ASP.NET MVC】モデルの作り方

    ASP.NET MVCでのモデルについて、皆様はどのように作成しておられますか? ASP.NET MVCで何本かWebシステムを構築して、いまだに試行錯誤です。 サンプル例を見ても、実際とはかけ離れた簡単な内容で、あまり参考になりません。 自分が見たいくつかのサイトではこのように書いてありました。 ドメインモデル データベースと1:1で存在する入出力用のモデル。EntityFrameworkで定義する。 拡張ドメインモデル ドメインモデルにプロパティを追加したり、複数のモデルを使いやすくまとめたモデル。 ビューモデル 画面表示するためのモデル。 フォームモデル フォーム入力値を受信するためのモデル。 理屈はわかるのですが、このように4種類もモデルを定義するものなのでしょうか? モデル間のデータのやりとりも大変ですし、定義だけで作業量が半端ない感じです。 継承などをうまく使って省力化する方法とかありますか? 皆さまの方法論をお聞きしたくお願い申し上げます。 ASP.NET MVCに限らず、CakePHPなどの例でも歓迎です。

  • ASP.NET MVC エンティティモデルの定義

    ASP.NET MVC コードファーストでの質問です。 エンティティモデルを定義する際、実際のテーブル構造と異なるモデルを 定義することは可能でしょうか? Imports System.ComponentModel.DataAnnotations Public Class SampleData Public Property Height As Long //実際に存在するカラム <Column("Taiju")> _ Public Property Weight As Long //実際に存在しないカラム(ただし「Taiju」というカラムが存在する) Public Property Bmi As Long //実際に存在しないカラム End Class カラム名が違う場合(上記Weight)、Column属性を指定すれば、指定カラムからデータを取得してくれます。 実際に存在しないカラム(上記Bmi)を定義した場合、このままですとデータ取得時に 「System.Data.SqlClient.SqlException: 列名 'Bmi' が無効です。」となります。 データ取得時にBmiを取得対象外としたいのですが、そのようなことは可能でしょうか? BmiをPrivate変数としてgetter./setter用Functionを定義すれば回避は可能なのですが、 スマートではないので、属性の指定等で対応できればと考えております。

  • ASP.NET MVC 最初からあるログイン機能

    こんにちは。 初心者向け書籍でASP.NET MVCの独学を始めたばかりのものです。 現在プログラムを書く用のパソコンと、SQL Serverをインストールしてあるパソコンが別々な環境で学習書籍を進めています。そのなかでWebアプリケーションに最初から備わっているログイン機能(デフォルト状態のView画面右上についている"ログイン"の機能)を使うところがあるのですが、ローカルにSQL Serverをインストールしてある前提なので、私の環境ではエラーになります。 そこで質問なのですが、以下の環境でWebアプリに最初から備わっているログイン機能を使用するにはどうすればよいのかご教示ください。 VS2010を使っているパソコン:192.168.1.1 SQL Server2008が入っているパソコン:192.168.1.2 SQL Serverの認証方法:SQL Server認証(ID:admin Pass:admin) 言語 C# ちなみに、ログイン機能以外のデータベースアクセスは問題なくできています。 補足すべき情報があったらご指摘ください。 よろしくお願いします。

  • MSDEのSQLについて

    DB初心者です。 通常のAcceessで支障なく使っていた以下のようなSQL文がMSDEのビューではエラーがかかって使えません。原因と対応法を教えて頂けないでしょうか? < 「テーブル1」の「フィールド1」と「フィールド2」の相関係数を算出するSQL文 > SELECT (Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))*([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))))/Sqr(Sum(([フィールド1]-(SELECT AVG([フィールド1]) FROM テーブル1))^2)*Sum(([フィールド2]-(SELECT AVG([フィールド2]) FROM テーブル1))^2)) AS 相関係数 FROM テーブル1; これがMSDEだと下のようなエラーになります。 ADOエラー: 集計やサブクエリを含む式に対して集計関数を実行することは出来ません。 どうしたいいでしょうか? また、MSDEや易しいTransactSQLを習得する良い方法があればアドバイスを頂きたいのですが。

  • WEBアプリのMVCについて質問です。

    一般的なフレームワークを用いたMVCについて質問です。 例えばM、これはモデルですね。 普通DBヘの接続はモデルでおこないクエリの発行もモデルで行いますね。 その後、クエリ実行後の結果をコントローラー側に返すと思います。 このとき、普段わたしはモデル上ではDB空の目的のデータをいっさい処理せずそのまま コントローラに返します。 返り値として、何かしらの一覧データを取得するものとします。例えば [ {name : "タロウ" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23}, {name : "花子" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23}, {name : "邦夫" , age : "20","town_id" : 10,"city_id" : 49, "prefecture_id" : 23} ] といった感じで特定の組み合わせのハッシュを多次元配列(リスト)的にラップしたものがかえりますよね。 そして、上記データをコントーラー側が受け取り、さぁいざビューへと受け渡す際に、どの程度コントローラでデータの 加工を行うものかが気になっています。 たとえば上記データでは「県市町」のデータがユニークなIDとして保持しています。このままでは「タロウ」が どの住所なのかがわかりません。どこかで「県市町」のデータリストを受け取りループで一致する住所を取得する 必要があります。 それをコントローラあるいはビュー・・・・どちらで行うのがMVCとして正しいのでしょうか?多少のループなら ビュー側で行うのもありかとおもいますが、はやりビューがループであふれかえるのは作業しにくいですよね。 MVCの基本だとは思いますが、rubyやPHPなど、フレームワークごとの細かい思想はあるでしょうが 一般的なMVCとしてみるとどうでしょうか? ちなみに、モデル内でjoin などつかって県市町のテーブルをくっつけるのはここでは考えないものとしてください。 個人的にはビュー内では大きなループ一度ですませたいものですが ・・・。

  • ASPから異なる複数のDBサーバーに接続する方法

    ASPの質問です。WEBサーバーと複数のDBサーバーがあります。 ADODB.Connectionでオラクルサーバーに接続し、データベースオブジェクトを作成しています。 別々のDBサーバーにあるテーブルを結合して利用したいのですが、ASPで可能でしょうか? 例えば"select * from A,B where A.ID=B.ID"というSQL文を実行する(AとBは別々のDBサーバーにある)。 とりあえず、代替案で検討しているのは片方のDBサーバーにデータベースリンクで他方のDBサーバーのVIEWを作ろうかと思っています。できればASPで解決したいのですが、よろしく御願いします。

  • Access:クエリーにて集計後に文字列結合したい。

    Accessのクエリーでレコードのグループ化を行っている状態で、あるフィールドに対してだけ文字列の結合を行いたいのですが、集計部分をどのように指定すればよいかわからず困っています。 イメージとしては、SQLビューにて、グループ化されたレコードの合計が、  SUM([テーブル名].[フィールド名]) で求められる様に、 エクセルの文字列結合関数  CONCATENATE([テーブル名].[フィールド名]) が使いたい、という感じです、、 Accessにおける文字列結合は"&"を使うとありましたが、この場合どのように記述するべきでしょうか?

専門家に質問してみよう