首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

LINQ to SQL 刪除操作與 Attach 異動:簡單刪除、一對多、推斷刪除與跨 DataContext 更新

     編輯:關於.NET

刪除操作

1. 簡單刪除

OrderDetail od = db.OrderDetails.First(x => x.OrderID == 10255 && x.ProductID == 36);
db.OrderDetails.DeleteOnSubmit(od);
db.SubmitChanges();

2. 一對多關聯刪除(先刪多端,再刪一端)

var details = from o in db.OrderDetails
              where o.Order.CustomerID == "WARTH" && o.Order.EmployeeID == 3
              select o;
var order = (from o in db.Orders
             where o.CustomerID == "WARTH" && o.EmployeeID == 3
             select o).First();
foreach (var d in details) db.OrderDetails.DeleteOnSubmit(d);
db.Orders.DeleteOnSubmit(order);
db.SubmitChanges();

3. 推斷刪除:從 EntitySet 移除即刪除

需關聯映射設定 DeleteOnNull=true 且 CanBeNull=false。

Order order = db.Orders.First(x => x.OrderID == 10248);
OrderDetail od = order.OrderDetails.First(d => d.ProductID == 11);
order.OrderDetails.Remove(od); // 自動標記刪除
db.SubmitChanges();

Attach:跨 DataContext 異動

適用於多層架構:實體從某 DataContext 取得、序列化傳遞、反序列化後附加到新 DataContext 進行更新。

更新範例

// 模擬反序列化實體
Customer deserializedC1 = new Customer { CustomerID = "ALFKI", Address = "Old Address", ... };
List<Order> deserializedOrders = ...;

using (NorthwindDataContext db2 = new NorthwindDataContext()) {
    db2.Customers.Attach(deserializedC1);        // 附加開始追蹤
    deserializedC1.Address = "123 First Ave";    // 修改屬性
    db2.Orders.AttachAll(deserializedOrders);    // 附加集合
    foreach (var o in deserializedOrders) o.CustomerID = "CHOPS";
    db2.SubmitChanges();
}

更新、刪除、新增混合範例

using (NorthwindDataContext temp = new NorthwindDataContext()) {
    DataLoadOptions ds = new DataLoadOptions();
    ds.LoadWith<Customer>(c => c.Orders);
    temp.LoadOptions = ds;
    temp.DeferredLoadingEnabled = false;
    Customer cust = temp.Customers.First(x => x.CustomerID == "ALFKI");
}

Order orderA = cust.Orders.First();
Order orderB = cust.Orders.First(x => x.OrderID > orderA.OrderID);

using (NorthwindDataContext db2 = new NorthwindDataContext()) {
    db2.Customers.Attach(cust);
    db2.Orders.AttachAll(cust.Orders.ToList());

    cust.Phone = "2345 5436";           // 更新客戶
    orderA.ShipCity = "Redmond";        // 更新訂單 A
    cust.Orders.Remove(orderB);         // 刪除訂單 B
    cust.Orders.Add(new Order { ShipCity = "New York" }); // 新增訂單 C

    db2.SubmitChanges();
}

Attach 讓離線實體進入追蹤狀態;AttachAll 批次附加集合。若未附加關聯集合,SubmitChanges 會嘗試插入而非更新。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved