asp.net mvc3.0 在EF Code-First中自定義Model跟數據庫中的表名、字段名的對應關系


一般情況下,我們的Model跟數據庫中的表名、字段名都是一一對應的,如果我們需要結構有所不同呢?EF Code-First中提供自定義數據庫結構的功能給我們了。我們可以通過重寫DbSet中的OnModelCreating方法,去添加我們的Mapping信息。

1)數據庫表明的映射
首先我們先來看看數據表明的映射。這里我需要將Departments映射到表名為tb_Departments的表上:

代碼 復制 運行

protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity<Department>().MapSingleType().ToTable("tb_Departments"); }



2)字段的映射
我想在數據庫中的每個字段中都會加上前綴“col_”,比如DepartmentID就是“col_DepartmentID”:

代碼 復制 運行

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; } }
我們Department信息中包含了一個CreateInfo類型的屬性:

代碼 復制 運行

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; } }
我們重寫編寫我們的Mapping信息:

代碼 復制 運行

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"); }
然后運行下我們發現會出現錯誤:System.NotSupportedException
原因是我們沒有注冊CreateInfo為complex 類型。所以我們首先需要注冊CreateInfo為復合類型,在OnModelCreating中加上注冊的代碼:

代碼 復制 運行

modelBuilder.ComplexType<CreateInfo>();

OK.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM