asp.net mvc3.0 EF Code-FirstでModelとデータベースのテーブル名、フィールド名の対応関係をカスタマイズ

2323 ワード

一般的に、モデルはデータベース内のテーブル名、フィールド名に対応していますが、構造が異なる必要がある場合は?EF Code-Firstでは、データベース構造をカスタマイズする機能を提供しています.DbSetのOnModelCreatingメソッドを書き換えることで、Mapping情報を追加できます.1)データベースが示すマッピングまず,データが示すマッピングを見る.ここでは、テーブル名tb_にDepartmentsをマッピングする必要があります.Departmentsのテーブル:
コードコピー-実行
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity().MapSingleType().ToTable("tb_Departments"); }

2)フィールドのマッピング
データベースの各フィールドに接頭辞「col_」を付けると思います.たとえばDepartmentIDは「col_DepartmentID」です.
コードコピー-実行
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity().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 Employees { get; set; } }

私たちのMapping情報を書き直します.
コードコピー-実行
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) { modelBuilder.Entity().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();

OK.
転載先:https://www.cnblogs.com/SOSOS/archive/2012/11/23/2783895.html