Entity Framework Code First - сопоставление одной сущности с несколькими таблицами без общего ключа - PullRequest
2 голосов
/ 03 февраля 2012

Я столкнулся с проблемой, касающейся первой версии кода 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 Ответ

2 голосов
/ 03 февраля 2012

Невозможно отобразить наследование, если у них нет одинакового первичного ключа во всех таблицах.Если вы хотите отобразить эти таблицы на одну и ту же сущность, должно быть отношение один к одному.Это означает, что DocumentId во второй таблице должно быть уникальным и, следовательно, включение StartDate в ключ не имеет смысла.

Также наследование TPC отображается по-разному .

...