此篇文是 Entity Framework 實戰 - 多對多自我關聯 Many to Many , Self Referencing 模型實作 (一)的續篇 , 當我們把基本模型 Product Class 建立好後,我們開始實作一個繼承 DbContext 的子類別,在這邊你可以把 DbContext 當做是資料庫的層次意義角度來看待
新增一個Class 名為 ProductContext.cs
然後按【新增】按鈕,並在 ProductContext 宣示繼承 DbContext 類別,如以下程式碼
1: using System;2: using System.Collections.Generic;3: using System.Data.Entity;4: using System.Linq;5: using System.Text;6: using System.Threading.Tasks;7:8: namespace EF6_ManyToManyAndSelf9: {10: public class ProductContext : DbContext11: {12:13: }14: }
接著加入 DbSet<Product> 的宣告,用於表示 存放著 Product Table(Class)的集合清單
public DbSet<Product> Products;
然後為了完成透過 Product 本身的 Class 來完成 多對多自身關聯,需要 override OnModelCreating Method , 程式碼如下
1: protected override void OnModelCreating(DbModelBuilder modelBuilder)2: {
3: base.OnModelCreating(modelBuilder);4:
5: modelBuilder.Entity<Product>()
6: .HasMany(p => p.RelatedProducts)
7: .WithMany(p => p.AboveProducts)
8: .Map(m =>
9: {
10: m.MapLeftKey("ProductID");11: m.MapRightKey("RelatedProductID");12: m.ToTable("RelatedProduct");13: }
14: );
15: }
到這邊基本上已經完成 EntityFramework 的宣告….
然後讓我們在前端界面使用我們實作好的 ProductContext ,來看看如何使用….程式碼如下
1: using System;2: using System.Collections.Generic;3: using System.Linq;4: using System.Text;5: using System.Threading.Tasks;6:
7: namespace EF6_ManyToManyAndSelf8: {
9: class Program10: {
11: static void Main(string[] args)12: {
13: using (var context = new ProductContext())14: {
15: var product1 = new Product { ProductName = "美容業零售管理系統", Price = 59888M };16: var product2 = new Product { ProductName = "窗簾業ERP系統", Price = 3500000M };17: var product3 = new Product { ProductName = "玩具製造業ERP系統", Price = 6700000M };18: product2.RelatedProducts.Add(product3);
19: product1.RelatedProducts.Add(product2);
20: context.Products.Add(product1);
21: context.SaveChanges();
22: }
23: using (var context = new ProductContext())24: {
25: var product2 = context.Products.First(p => p.ProductName == "窗簾業ERP系統");26: Console.WriteLine("Product: {0} ... {1}", product2.ProductName, product2.Price.ToString("C"));27: Console.WriteLine("Related Products");28: foreach (var prod in product2.RelatedProducts)29: {
30: Console.WriteLine("\t{0} ... {1}", prod.ProductName, prod.Price.ToString("C"));31: }
32: foreach (var prod in product2.AboveProducts)33: {
34: Console.WriteLine("\t{0} ... {1}", prod.ProductName, prod.Price.ToString("C"));35: }
36: }
37:
38: Console.ReadKey();
39: }
40: }
41: }
執行結果為
網智數位-軟體開發(軟件開發)