实体框架代码优先 - 单个实体映射到没有公共密钥的多个表

时间:2012-02-03 05:37:26

标签: entity-framework-4 code-first

我在将一个实体映射到现有数据库中的多个表时面临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);
}

无法更新Table1。

1 个答案:

答案 0 :(得分:2)

如果所有表中没有相同的主键,则无法映射继承。如果要将这些表映射到同一实体,则必须存在一对一关系。这意味着第二个表中的DocumentId必须是唯一的,因此在密钥中包含StartDate是没有意义的。

TPC继承也是mapped differently