将带有 Customer 实体的旧数据库拆分为 3 个表 (1-1),并使用共享键。想要使用 Code First TPH 并将其映射到拆分表。这是简化的类层次结构(省略了许多原始属性及其映射):
public abstract partial class Customer
{
public int Id { get; set; }
public bool Leasing { get; set; }
public string Address { get; set; }
public string Name { get; set; }
}
class PrivateCustomer : Customer
{
public string PrivateName { get; set; }
}
class CorporateCustomer : Customer
{
public string CompanyName { get; set; }
}
以下是我尝试将其映射到 3 个表的方法:
public class CustomerMap : EntityTypeConfiguration<Customer>
{
public CustomerMap()
{
Map<CorporateCustomer>(m => m.Requires("ClientType").HasValue(2))
.Map<PrivateCustomer>(m => m.Requires("ClientType").HasValue(1));
// Primary Key
HasKey(t => t.Id);
// Table & Column Mappings
Map(m =>
{
m.ToTable("CustomerSet");
m.Properties(p => new
{
p.Id,
p.Leasing,
//p.PrivateName
});
});
Map(m =>
{
m.ToTable("SiriusCustomer");
m.Properties(p => new
{
p.Id,
p.Address
});
m.Property(p => p.Id).HasColumnName("AccessUserId");
m.Property(p => p.Address).HasColumnName("SiriusAddres");
});
Map(m =>
{
m.ToTable("AccessUser");
m.Properties(p => new
{
p.Id,
p.Name,
//p.CompanyName
});
m.Property(p => p.Id).HasColumnName("AccessUserId");
m.Property(p => p.Name).HasColumnName("AccessUserName");
//m.Property(p => p.CompanyName).HasColumnName("AccessUserCompany");
});
}
}
但我不知道如何手动将 PrivateName 和 CompanyName 映射到所需表中的所需列。那可能吗?谢谢。