表拆分

現在讓我們假設你要執行與實體拆分相反的操作:不是將一個實體對映到兩個表,而是希望將一個表對映到兩個實體。這稱為表拆分。假設你有一個包含五列的表:PersonId,Name,AddressLine,City,ZipCode,其中 PersonId 是主鍵。然後你想建立一個這樣的 EF 模型:

public class Person  
{
  public int PersonId { get; set; }
  public string Name { get; set; }
  public Address Address { get; set; }
}

public class Address  
{        
  public string ZipCode { get; set; }
  public string City { get; set; }
  public string AddressLine { get; set; }
  public int PersonId { get; set; }
  public Person Person { get; set; }
}

有一件事情就是跳出來:地址中沒有 AddressId。這是因為兩個實體對映到同一個表,因此它們也必須具有相同的主鍵。如果你進行表格拆分,這是你必須要處理的事情。因此,除了表拆分之外,還必須配置 Address 實體並指定主鍵。這是如何:

public class MyDemoContext : DbContext  
{
  public DbSet<Person> Products { get; set; }
  public DbSet<Address> Addresses { get; set; }

  protected override void OnModelCreating(DbModelBuilder modelBuilder)
  {
     modelBuilder.Entity<Address>().HasKey(t => t.PersonId);
     modelBuilder.Entity<Person>().HasRequired(t => t.Address)
                                  .WithRequiredPrincipal(t => t.Person);

     modelBuilder.Entity<Person>().Map(m => m.ToTable("People"));
     modelBuilder.Entity<Address>().Map(m => m.ToTable("People"));
  }
}