2011-08-03 5 views
0

私はいくつかのテーブルを持っていますが、それらのテーブルは一意のキー制約に基づいています。EFジョインとMVCカミソリビュー

簡単な例は次のとおりです。

VERSIONID、VersionName
SurveyId、SurveyName、VERSIONID
QuestionId、QuestionName、SurveyId、VERSIONID

EFは現在、ユニークキー制約に基づいて関係をサポートしていません。質問のインデックスビューでは、モデルに関する調査名付き質問のグリッドを表示するために、調査に参加するための最良の方法は何ですか?

匿名タイプが必要ですか? db.Questions.Include( "Surveys")は何もしないようです。私はlinqを使用して、結合テーブルのViewModelを作ることができましたが(私はこれが行く方法と思われます)、EF & MVCには非常に多くのことがあります。

答えて

1

調査表と質問表の両方にバージョン(VersionID)へのリンクがあるのはなぜですか?質問からアンケートまでのバージョンに到達できませんでしたか? 非複数 - あなたが質問や調査の間の関係を持っている場合

また、それはdb.Questions.Include("Survey")する必要があります(それぞれの質問に一つだけの調査を持っている)、多対1または1対1です。

+0

「なぜバージョンが問題なの?」という簡単な答えは、質問にリンクされたバージョンに依存する他のテーブルがあることです。回答が問題の適切なバージョンであることを確実にするために、質問テーブル自体にバージョンが必要です。 –

+0

"Include"を使用すると、結果のエンティティに追加のプロパティはありません。エンティティフレームワークがユニークなキー制約を認識していないため、外部キーをスキップ/無視します。 –

+0

私は、データベース自体に参照制約を確実にする複合キーを持っています。あなたの質問は私に、関連するデータだけのEF関連付けをさせました。そしてそれはチャンピオンのように働いた!そして、私はスキーマをリフレッシュしなければならなかった。私は思っていた。冗長な関係はデータベースに害を及ぼさないだろう。それで、複合キーとBAMの代わりに単一のキーだけでつながるたくさんの関係を追加した。 EFの良さで感想をありがとう:-) –

1

まずは、かみそりビューの結合(または実際には他のロジック)はありません。コントローラはViewModelを構築する場所であり、ビューはそのViewModelを表示する手段です。あなたが言及したように、ViewModelを作ることは、正しい(正しい)方法です。どのような方法であれ、そのビューモデルを埋めることができます - linqは、結合されたデータを作成するための絶対的な方法です。さらに進めたい場合は、コントローラーではなく、例えばQuestionRepositoryのような何らかのリポジトリにその結合ロジックを配置する必要があります。

+0

ああ、コントローラではない質問リポジトリ、私はそれが好きです:-)私はすべてのロジックを関連付けられたコントローラ内のエンティティに関連付けるように努力してきました... –

関連する問題