2012-02-03 15 views
2

EFコードの最初のバージョンに関する問題に直面していますが、既存のデータベースの複数のテーブルにエンティティをマッピングしています。エンティティフレームワークコードファースト - 共通エンティティなしの複数のテーブルへの単一エンティティ

Table1: (primaryKey is IdDocument) 
---------------------------- 
IdDocument | CreationDate 
---------------------------- 

Table 2: (primaryKey is on IdDocument and StartDate) 
------------------------------------------------------------ 
IdDocument | StartDate | Label | LastUpdate 
------------------------------------------------------------ 

私はデータベース内の情報を更新しようとしていました。以下はエンティティクラスです。これは、表1を更新するために失敗した

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Document>() 
     .Map(m => 
      { 
      m.Properties(document => new 
          { 
          document.IdDocument, 
          document.CreationDate 
          }); 
      m.ToTable("MetaDocument"); 
      }).Map(m => 
        { 
        m.Properties(document => new 
           { 
           document.IdDocument, 
           document.StartDate, 
           document.EndDate, 
           document.Label, 
           document.LastUpdate, 
           document.Currency 
           }); 
        m.ToTable("Document"); 
        }).HasKey(key => new 
          { 
          key.IdDocument, key.StartDate 
          }); 
    base.OnModelCreating(modelBuilder); 
} 

public abstract class DocumentBase 
{ 
    [Column("idDocument")] 
    public int? IdDocument { get; set; } 
    [Column("CreationDate")] 
    public DateTime CreationDate { get; set; } 
} 

public class Document : DocumentBase 
{ 
    [Column("startDate")] 
    public DateTime StartDate { get; set; } 
    [Column("lastUpdate")] 
    public DateTime LastUpdate { get; set; } 
    [Column("label")] 
    public string Label { get; set; } 
} 

後は、同じエンティティのDbModelBuilderです。

+1

コードをより読みやすくなるように書式設定しようとしました。私はまだそれが正しいことを願っています。 –

答えて

2

すべてのテーブルに同じプライマリキーがない場合、継承をマップすることはできません。これらのテーブルを同じエンティティにマップする場合は、1対1の関係にする必要があります。これは、第2のテーブルのDocumentIdが一意でなければならないことを意味し、したがって、StartDateをキーに含めることは意味をなさない。

また、TPC継承はmapped differentlyです。

関連する問題