ASP.NET MVC 3.0以EF代码优先的方式定义了模型和表名与数据库中字段名的对应关系
墨初 知识笔记 60阅读
通常,我们的模型与数据库中的表名和字段名是一一对应的。如果我们需要不同的结构呢?EF Code-First为我们提供了自定义数据库结构的功能。我们可以通过重写DbSet中的OnModelCreating方法来添加映射信息。1)数据库指示的映射首先,我们来看看数据指示的映射。这里我需要将部门映射到一个名为TB _ departments : code copy n . bsp;的表中。-在模型上运行受保护的覆盖void创建(系统。data . entity . model configuration . model builder模型构建器){模型构建器.实体部门()。mapsingletype()。总计(“TB _ departments”);} 2)字段的映射我想给数据库中的每一个字段加上前缀“col_ ”,比如DepartmentID就是“col_DepartmentID”:代码复制-
coration: none" href="http://http://" target="_blank">运行
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().MapSingleType(depart => new { col_DepartmentID = depart.DepartmentID, col_DepartmentName = depart.DepartName, col_Remark = depart.Remark }) .ToTable("tb_Departments"); }
3)复杂类型的映射
在这里我们添加一个CreateInfo的Model:
public class CreateInfo { public string CreateUserID { get; set; } public DateTime? CreateDate { get; set; } }

public class Department { public int DepartmentID { get; set; } public string DepartName { get; set; } public string Remark { get; set; } public CreateInfo CreateInfo { get; set; } public virtual ICollection<Employee> Employees { get; set; } }
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().MapSingleType(depart => new { col_DepartmentID = depart.DepartmentID, col_DepartmentName = depart.DepartName, col_Remark = depart.Remark, col_CreateUserID= depart.CreateInfo.CreateUserID, col_CreateDate = depart.CreateInfo.CreateDate }) .ToTable("tb_Departments"); }
原因是我们没有注册CreateInfo为complex 类型。所以我们首先需要注册CreateInfo为复合类型,在OnModelCreating中加上注册的代码:
OK.