表拆分
現在讓我們假設你要執行與實體拆分相反的操作:不是將一個實體對映到兩個表,而是希望將一個表對映到兩個實體。這稱為表拆分。假設你有一個包含五列的表: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"));
}
}