Entity Framework使用配置夥伴創建數據庫
在上一篇文章中講瞭如何使用fluent API來創建數據表,不知道你有沒有註意到一個問題。上面的OnModelCreating方法中,我們隻配置瞭一個類Product,也許代碼不是很多,但也不算很少,如果我們有1000個類怎麼辦?都寫在這一個方法中肯定不好維護。EF提供瞭另一種方式來解決這個問題,那就是為每個實體類單獨創建一個配置類。然後在OnModelCreating方法中調用這些配置夥伴類。
創建Product實體類:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.Entity.ModelConfiguration; namespace EF配置夥伴.Model { public class Product { public int ProductNo { get; set; } public string ProductName { get; set; } public double ProductPrice { get; set; } } }
創建Product實體類的配置類:ProductMap,配置類需要繼承自EntityTypeConfiguration泛型類,EntityTypeConfiguration位於System.Data.Entity.ModelConfiguration命名空間下,ProductMap類如下:
using EF配置夥伴.Model; using System; using System.Collections.Generic; using System.Data.Entity.ModelConfiguration; using System.Linq; using System.Text; namespace EF配置夥伴.EDM { public class ProductMap :EntityTypeConfiguration<Product> { public ProductMap() { // 設置生成的表名稱 ToTable("ProductConfiguration"); // 設置生成表的主鍵 this.HasKey(p => p.ProductNo); // 修改生成的列名 this.Property(p =>p.ProductNo).HasColumnName("Id"); this.Property(p => p.ProductName) .IsRequired() // 設置 ProductName列是必須的 .HasColumnName("Name"); // 將ProductName映射到數據表的Name列 } } }
在數據上下文Context類的OnModelCreating()方法中調用:
using EF配置夥伴.EDM; using EF配置夥伴.Model; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; namespace EF配置夥伴.EFContext { public class Context:DbContext { public Context() : base("DbConnection") { } public DbSet<Product> Products { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 添加Product類的配置類 modelBuilder.Configurations.Add(new ProductMap()); base.OnModelCreating(modelBuilder); } } }
查看數據庫,可以看到符合我們的更改:
這種寫法和使用modelBuilder是幾乎一樣的,隻不過這種方法更好組織處理多個實體。你可以看到上面的語法和寫jQuery的鏈式編程一樣,這種方式的鏈式寫法就叫Fluent API。
到此這篇關於Entity Framework使用配置夥伴創建數據庫的文章就介紹到這瞭。希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Entity Framework使用DbModelBuilder API創建表結構
- Entity Framework使用Fluent API配置案例
- Entity Framework管理一對二實體關系
- Entity Framework實體拆分多個表
- EF使用Code First模式生成單數形式表名