OrderDetail od = db.OrderDetails.First(x => x.OrderID == 10255 && x.ProductID == 36);
db.OrderDetails.DeleteOnSubmit(od);
db.SubmitChanges();
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();
需關聯映射設定 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();
適用於多層架構:實體從某 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 會嘗試插入而非更新。