2012-04-09 6 views
2

単一のEntityクラスを持つ2つのテーブルからデータを取得したいとします。どうやって??複数のテーブルを持つ単一のエンティティをマップする方法

public class HomeViewModel 
{ 
    [Key] 
    [Column("candidate_ID")] 
    public int candidateID { get; set; } 
    [Column("first_name")] 
    public string firstName { get; set; } 
    [Column("last_name")] 
    public string lastName { get; set; } 

    public string emailID { get; set; } 
    public string mb_country_code { get; set; } 
    public int mobile_no { get; set; } 
} 

上記のエンティティクラスは6つのプロパティを保持します.3プロパティは1つのテーブルを表し、3はtable2を表します。データベーステーブル1で は、主キーとしてcandidate_id保持し、表2は、外部キー

アップデートとしてcandidate_id保持している:私は

public class EmployeeMonitoring : DbContext 
{ 
    public DbSet<HomeViewModel> homeViewModel { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<HomeViewModel>().Map(m => 
      { 
       m.Properties(a => new { a.candidateID, a.firstName, a.lastName,a.status }); 
       m.ToTable("table1"); 
      }).Map(m => 
      { 
       m.Properties(c => new { c.candidateID,c.emailID, c.mobile_no, c.mb_country_code }); 
       m.ToTable("table2"); 
     }); 
    } 
}` 

と私はエンティティクエリ

へのLINQを、次の使用コントローラのアクションでDBContextクラスに追加されました何
var data = db.homeViewModel.ToList(); 

しかし、何も返しません。つまり0カウントです。

+0

私はmvcチュートリアルを推奨します –

+0

タグエンティティフレームワーク4.1も追加してください。 –

+1

@AndrewBarber - MVCチュートリアルは、Entity Frameworkの概念についてどのように教えてくれますか?すべてのMVCチュートリアルでは、このような高度な概念ではなく、基本的なEFについてのみ説明します。 –

答えて

1

まず、daatbaseテーブルのデータを確認します。
table2に関連するデータがない可能性があるからです。すなわちtable1主キー値(candidate_id)はtable2の外部キー候補IDには存在しません。

1

Table2がtable1への外部キーを保持しているに過ぎないが、別のプライマリキーを持っていることを示唆している場合は、あなたが求めていることを本当に行うことはできません。単純にforiegnキーを保持するということは、1対多の関係であり、1つのエンティティを1対多の関係にマップする方法はありません(たとえデータにレコードが1つしかなく、モデル関係タイプが1対多であっても)

あなたは表2はcandidate_idの主キーと外部キーを持っている(したがって、それは1対1のマッピングです)という意味なら、あなたは、継承を使用してかなり簡単に単一のエンティティにそれらをマッピングすることができますが、ここで説明:

http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-2-table-per-type-tpt.aspx

2つのテーブルからのデータを含む単一のオブジェクトを作成するだけであれば、それは比較的単純なlinqクエリです。これは、あなたがここで探しているものを正確に知らない。

0

これはエンティティ分割と呼ばれます。それを動作させるには、CandidateIDが両方のテーブルのプライマリキーで、2番目のテーブルの外部キーでなければなりません(エンティティ分割はデータベースの一対一のリレーションでのみ機能します)。

編集:さらに制限があります。エンティティ分割はオプションのリレーションを許可しません。両方のテーブルのレコードが存在する必要がありますので、table2レコードがオプションの場合は、両方のテーブルを別々にマップし、ロードされたレコードからアプリケーションにビューモデルを構築する必要があります。

+0

しかし、@Ladislav私はtable2が外部キー値を保持しているときだけデータを取得しています。しかし、私はtable2データを任意にしたいです。e table1のデータをtable2で使用可能な関連データかどうかを表示します。 – RollerCosta

+0

答えにいくつかの説明を追加しました。 –

+0

@ LadislavMrnkaの答えに若干の変更があります。 – RollerCosta

関連する問題