3

単一のエンティティクラスを持つ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つのテーブル1を表し、3はテーブル2を表します。データベースでは、テーブル1は主キーとしてcandidate_idを保持し、テーブル2は外部キーとしてcandidate_idを保持します。

更新:私がしたことは、DBContextクラスを追加したことです

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");
        });
     }
}`

コントローラーアクションで、LinqtoEntityQueryを使用しました

var data = db.homeViewModel.ToList();

ただし、何も返されません。つまり、0カウントです。

4

3 に答える 3

1

Table2がtable1への外部キーを保持しているだけで、主キーが異なることを示唆している場合、要求していることを実際に行うことはできません。単に外国のキーを保持することは、それが1対多の関係であることを意味し、そのような1対多の関係にわたって単一のエンティティをマップする方法はありません(データに1つのレコードしか含まれていない場合でも、モデルの関係タイプは1対多のままです)

Table2に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クエリですが、ここで何を探しているのか正確にはわからないため、ここでは説明しません。

于 2012-04-09T08:24:12.373 に答える
1

最初にdaatbaseテーブルのデータを確認してください。
これは、table2に関連データがない可能性があるためです。つまり、table1のプライマリキー値(candidate_id)がtable2の外部キーcandidateIDに存在しません。

于 2012-04-09T09:23:06.400 に答える
0

これはエンティティ分割と呼ばれます。これを機能させるにCandidateIDは、両方のテーブルの主キーと2番目のテーブルの外部キーである必要があります(エンティティ分割は、データベース内の1対1の関係でのみ機能します)。

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

于 2012-04-09T09:10:45.150 に答える