2009-03-07 18 views
1

私はStudentAppを.NET 3.5 SP1 MVCアプリケーションで開発しています。Entity Frameworkで外部キーを取得する方法は?

I持つ二つのテーブル

  1. コース
    CourseID、COURSE_NAME
  2. 学生
    studentID、student_Name、courseID(FK)

今は両方を有するさStudentApp.dbmlを作っテーブルをエンティティとして使用します。

外部キーは学生エンティティには存在しませんので、 studentIDにcourseIDを表示できません。さらに、私は追加、編集、リストビューを生成できません。

生徒にcourseID(fk)を表示する方法を教えてください&また、コース名が必要です。

また、編集ビューにcourseIDを格納するコース名&を示すドロップダウンボックス。

+0

Entity Frameworkを使用していますか? DBMLマッピングファイルはLinqからSqlへ – RobS

+0

あなたはそれがEntity Frameworkであったのですか – Vikas

+0

質問を編集して意味をなさないようにしてください。 L2SとEFは外部キー*を完全に別々に扱います。 –

答えて

1

Visual StudioでLINQ-to-SQLを使用してDBMLファイルを作成した場合、StudentオブジェクトのCourseプロパティで外部キーをリストすることができます(自動的に生成されるのは、1対多の関係ですStudent)。ソートのこのような:

var studentCourseIds = 
    from s in context.Students 
    select s.Course.CourseID; 

あなたの目標は、それがすでにStudent.Course.course_Nameでアクセスcoursenameを見つけることですので。

+0

よろしくお願いいたします。 LINQ to SQLクラスを使用しました。 私の目的は、すべてのレコードを表示するビューにStudentオブジェクトを表示することです。 私はMVCアーキテクチャ..を使用しているので、私は上記のコードを置く場所ですか? – Vikas

+0

Vikas:MVCでどのような戦略を使用するかによって異なります。私のMVCでは、リポジトリクラス(リポジトリパターンのもの)をモデルに作成し、一般的にデータベースから必要なものを返します。そして、私はリポジトリから必要なものをさらにフィルタリングするサービスクラスを持っています。 – Spoike

0

DBMLを投稿できますか?また、DBMLはLINQ to SQL(L2S)で使用されます.EDMXはADO Entity Frameworkで使用されるマッピングです。 LINQ to SQLまたはEntity Framework(EF)を使用していますか?

どちらが使用していても、どちらも外部キーをサポートしており、関係のどちらかを表すプロパティを取得します。特別な操作は必要ありません(外部キーはデータベースに存在する必要があります。コース)。

EFでは、外部キーは「ナビゲートプロパティ」と呼ばれ、L2Sの外部キーとは少し異なります。大事なことはありませんが、それらを更新することと「熱心な読み込み」は多少異なります。

Visual Studioでデザイナーのテーブルにテーブルをドロップするだけです(または、必要に応じて同等のコマンドラインを使用して生成する)。

外部キーとドロップダウンリスト(とその他のUIの良さ)について - 私はあなたに合ったいくつかのアプローチについていくつかのブログエントリを書いていました。 1つの部分はhereであり、2つの部分はhereである。

+0

StudentApp.dbmlはエンティティデータモデルです。 studentテーブルのcourseIDにはマッピングがありません。 マッピングは関連付けとして扱われます。 以上 私はMVCアーキテクチャを使用しています。 私は学生のインデックスビューを追加するので、Entityフレームワークによって自動的に生成されたStudentApp.model から継承します。 – Vikas

+0

私はモデルでcourseIDを取得しません.... だから私は何をすべきですか? – Vikas

0

SQLサーバーデータベースに正しい関係を作成し、DBMLデザイナーにテーブルを追加すると、リレーションシップもまたコピーされ、コードは自動的にリンクされます。

2

各エンティティの外部参照を読み込む必要があります。どのようにあなたのAPIを構築したのかわからないので、私はあなたに擬似コードの例を与える必要がありますが、これはあなたがする必要があると思います。

List<Students> studList = [your_db_facade].SelectStudents() // Or however you retrieve your students 

foreach (Students singleStudent in studList) 
    singleStudent.Context.CourseReference.Load() //CourseReference.Load() should be in the framework 

その後、あなたはそれがあなたのために多少異なって見えることができますが、私はあなたの問題を解決するための鍵はCourseReference.Load(だと思う

singleStudent.Course.CourseID 
singleStudent.Course.course_Name 

のような単一の学生エンティティからCourseIDと名前を取得します) 。

関連する問題