很久沒用過EF了,最近換了公司,用的是EF框架,的確已經忘記了EF很多東西,雖說EF這東西性能不太好,但是可以滿足我們的快速開發,在新的項目中我遇到了操作中間表的問題,我記得大學的時候用過,但是年代久矣,那時候又沒有寫博客的習慣,現在就寫下來,以防又忘記了。 言歸正傳: EF中間表是隱藏起來的,在E ...
很久沒用過EF了,最近換了公司,用的是EF框架,的確已經忘記了EF很多東西,雖說EF這東西性能不太好,但是可以滿足我們的快速開發,在新的項目中我遇到了操作中間表的問題,我記得大學的時候用過,但是年代久矣,那時候又沒有寫博客的習慣,現在就寫下來,以防又忘記了。
言歸正傳:
EF中間表是隱藏起來的,在EF可視化視圖裡面是看不到這個東東的。只能在資料庫裡面看到。
一共有3張表,如圖下:
Orders表是訂單表,Product是商品表,Orders_Product是中間表.
創建EF模型我就不說了,這個就略過了。
下麵就開始操作中間表
一:新增:
public static void CreateFullOrdersByProduct() { using (var dbcontext = new TestEntities()) { var order = new Orders { OrderTitle = "購買汽車", CustomerName = "sss", TransactionDate = DateTime.Now, Product = new List<Product>() }; var employee1 = new Product { PName = "ss", Orders = new List<Orders>() }; var employee2 = new Product { PName = "sss", Orders = new List<Orders>() }; dbcontext.Orders.Add(order); order.Product.Add(employee1); dbcontext.SaveChanges(); } }
二:刪除
public static void EmptyOrdersProduct() { using (var dbcontext = new TestEntities()) { //獲取Product為1的所有Orders所有的信息 var producttoUpdate = dbcontext.Product.Include("Orders").FirstOrDefault(x => x.ID == 1); if (producttoUpdate != null) { producttoUpdate.Orders = new List<Orders>(); dbcontext.SaveChanges(); } else { Console.WriteLine("查詢失敗"); } } }
//這也是新增
public static void AddOrdersProduct() { using (var dbcontext = new TestEntities()) { var product = dbcontext.Product.Include("Orders").FirstOrDefault(x => x.ID == 2); int[] orderList = { 13, 14, 15, 16, 17, 18, 19 }; if (product != null) { var productOrder = new HashSet<int>(product.Orders.Select(x => x.ID)); foreach (var item in dbcontext.Orders) { if (productOrder.Contains(item.ID)) { //列印出重覆的orderid Console.WriteLine("重覆的id為" + item.ID); Console.WriteLine("不執行添加結果"); } else { //列印出Employee表中沒有id Console.WriteLine($"即將添加的值:{item.ID}"); product.Orders.Add(item); } } } else { Console.WriteLine("product為空"); } dbcontext.SaveChanges(); } }
三:刪除和修改
public static void UpdateInfoProductOrders() { using (var dbcontext = new TestEntities()) { int[] orderIdList = { 13, 14, 15, 16, 17, 18, 19 }; var productOrders = dbcontext.Product.Include("Orders").FirstOrDefault(x => x.ID == 2); if (productOrders != null) { //獲取product中的OrderList var productOrderList = new HashSet<int>(productOrders.Orders.Select(e => e.ID)); foreach (var order in dbcontext.Orders) { if (orderIdList.Contains(order.ID)) { //判斷要修改的orderid和orders表中的均包含 if (!productOrderList.Contains(order.ID)) { Console.WriteLine($"修改對應的訂單Id表{order.ID}"); productOrders.Orders.Add(order); } } else { if (productOrderList.Contains(order.ID)) { Console.WriteLine($"刪除無用的訂單表{order.ID}"); productOrders.Orders.Remove(order); } } } } else { Console.WriteLine("查無的信息"); } dbcontext.SaveChanges(); }