1.1 拆分实体到多张表
假设你有如下表,如图6-1。Product表用于存储商品的字符类信息,ProductWebInfo用于存储商品的图片,两张表通过SKU关联。现在你想把两张表的信息整合到一个实体类。
图6-1
1.2 使用code first 新建如下的poco实体:
public class Product { [Key] [DatabaseGenerated(DatabaseGeneratedOption.None)] public int SKU { get; set; } public string Description { get; set; } public decimal Price { get; set; } public string ImageURL { get; set; } }
1.3 创建一个继承自DbContext的数据访问类“EF6RecipesContext”
public class EF6RecipesContext : DbContext { public DbSet<Product> Products { get; set; } public EF6RecipesContext() : base("name=EF6CodeFirstRecipesContext") { } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity<Product>() .Map(m => { m.Properties(p => new { p.SKU, p.Description, p.Price }); m.ToTable("Product"); }) .Map(m => { m.Properties(p => new { p.SKU, p.ImageURL }); m.ToTable("ProductWebInfo"); }); } }
1.4 测试代码:
1 using (var context = new EF6RecipesContext()) 2 { 3 var product = new Product 4 { 5 SKU = 147, 6 Description = "Expandable Hydration Pack", 7 Price = 19.97M, 8 ImageURL = "/pack147.jpg" 9 }; 10 context.Products.Add(product); 11 product = new Product 12 { 13 SKU = 178, 14 Description = "Rugged Ranger Duffel Bag", 15 Price = 39.97M, 16 ImageURL = "/pack178.jpg" 17 }; 18 context.Products.Add(product); 19 product = new Product 20 { 21 SKU = 186, 22 Description = "Range Field Pack", 23 Price = 98.97M, 24 ImageURL = "/noimage.jp" 25 }; 26 context.Products.Add(product); 27 product = new Product 28 { 29 SKU = 202, 30 Description = "Small Deployment Back Pack", 31 Price = 29.97M, 32 ImageURL = "/pack202.jpg" 33 }; 34 context.Products.Add(product); 35 context.SaveChanges(); 36 } 37 using (var context = new EF6RecipesContext()) 38 { 39 foreach (var p in context.Products) 40 { 41 Console.WriteLine("{0} {1} {2} {3}", p.SKU, p.Description, 42 p.Price.ToString("C"), p.ImageURL); 43 } 44 }