表拆分使我们能够将多个实体映射到数据库单表,也就是说我们可以将模型中的多个实体映射到数据库中一张表里。下面以雇员为例
Employee
public class Employee
{
public string employeeId { get; set; }
public string employeeName { get; set; }
public string phoneNumber { get; set; }
public string address { get; set; }
public DateTime employTime { get; set; }
public virtual EmployeeParent EmployeeParent { get; set; }
}
EmployeeParent
public class EmployeeParent
{
public string iiiiid { get; set; }
public Employee employee { get; set; }
public string test { get; set; }
}
将EmployeeParent设置为Employee的导航属性
下面将两个实体映射到一张表中
EmployeeMap
public class EmployeeMap : EntityTypeConfiguration<Employee>
{
public EmployeeMap()
{
ToTable("tablesplit");
HasKey(p => p.employeeId);
HasRequired(p => p.EmployeeParent).WithRequiredPrincipal(o => o.employee);
}
}
EmployeeParentMap
public class EmployeeParentMap:EntityTypeConfiguration<EmployeeParent>
{
public EmployeeParentMap()
{
ToTable("tablesplit");
HasKey(p => p.iiiiid);
}
}
demo
EmployeeParent stu = new EmployeeParent()
{
test = "haha",
employee = new Employee()
{
employeeId = System.Guid.NewGuid().ToString("N"),
employeeName = "chen",
employTime = DateTime.Now,
address = "dalian",
phoneNumber = "1233456"
}
};
using (var dd = new Model1())
{
dd.employee.Add(stu);
dd.SaveChanges();
var test = dd.employee.ToList();
var tt = dd.employee2;
foreach (var item in test)
{
item.employee=tt.Where(t=>t.employeeId==item.iiiiid).First();
item.employee.employeeName = "cc";
}
dd.SaveChanges();
}
DbContext
public partial class Model1 : DbContext
{
public Model1()
: base("name=Model1")
{
}
public virtual DbSet<EmployeeParent> employee { get; set; }
public virtual DbSet<Employee> employee2 { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
var typesTomap = Assembly.GetExecutingAssembly().GetTypes()
.Where(type => !String.IsNullOrEmpty(type.Namespace))
.Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType
.GetGenericTypeDefinition() == typeof(EntityTypeConfiguration<>));
foreach (var item in typesTomap)
{
dynamic config = Activator.CreateInstance(item);
modelBuilder.Configurations.Add(config);
}
base.OnModelCreating(modelBuilder);
}
}