2012-02-03 28 views
2

我正面臨着EF代碼第一版的問題,同時將一個實體映射到現有數據庫中的多個表。實體框架代碼優先 - 單個實體映射到多個表,但沒有公用密鑰

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

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

在單個實體中,我試圖更新數據庫中的信息。以下是實體類。

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,

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

它沒有更新表1。

+1

我試圖格式化您的代碼,使其更具可讀性。我希望它仍然是正確的。 – 2012-02-03 12:09:44

回答

2

如果所有表中沒有相同的主鍵,則無法映射繼承。如果你想將這些表映射到同一個實體,那麼必須有一對一的關係。這意味着第二張表中的DocumentId必須是唯一的,因此在密鑰中包含StartDate沒有任何意義。

另外TPC繼承是mapped differently

相關問題