alexa-tracking

[ASK] Hapus object detail (Master-Detail Relationship) menggunakan Entity Framework

Main Content

1024
1024
KASKUS
51
244
https://www.kaskus.co.id/thread/53aaaa19de2cf2fa148b4650/ask-hapus-object-detail-master-detail-relationship-menggunakan-entity-framework
[ASK] Hapus object detail (Master-Detail Relationship) menggunakan Entity Framework
Gan, ane lagi bikin modul pembelian pake EF. Problemnya saat simpan item yang dihapus saat ubah pembelian.

Logic programnya, pas simpan ubah pembelian:
Code:
PurchaseOrder purchaseOrder = purchaseOrderManager.GetPurchaseOrder(PurchaseOrderID);
purchaseOrder.PurchaseOrderDate = purchaseOrderVM.PurchaseOrderDate;
purchaseOrder.InvoiceNo = purchaseOrderVM.InvoiceNo;
purchaseOrder.SupplierID = purchaseOrderVM.SupplierID;

foreach (PurchaseOrderDetailViewModel purchaseOrderDetailVM in purchaseOrderVM.PurchaseOrderDetails)
{
// New
if (purchaseOrderDetailVM.PurchaseOrderDetailID == 0)
{
purchaseOrder.PurchaseOrderDetails.Add(new PurchaseOrderDetail()
{
PurchaseOrderID = purchaseOrderDetailVM.PurchaseOrderID,
ItemID = purchaseOrderDetailVM.ItemID,
Quantity = purchaseOrderDetailVM.Quantity,
BuyPrice = purchaseOrderDetailVM.BuyPrice
});
}
// Edit
else
{
PurchaseOrderDetail purchaseOrderDetail = purchaseOrder.PurchaseOrderDetails.Single(
pod => pod.PurchaseOrderDetailID == purchaseOrderDetailVM.PurchaseOrderDetailID);

purchaseOrderDetail.Quantity = purchaseOrderDetailVM.Quantity;
purchaseOrderDetail.BuyPrice = purchaseOrderDetailVM.BuyPrice;
}
}

// Delete ???
foreach (PurchaseOrderDetail purchaseOrderDetail in purchaseOrder.PurchaseOrderDetails)
{
var deleted = purchaseOrderVM.PurchaseOrderDetails.SingleOrDefault(
pod => pod.PurchaseOrderDetailID == purchaseOrderDetail.PurchaseOrderDetailID);

if (deleted == null)
{
// Ga bs dihapus ???
purchaseOrder.PurchaseOrderDetails.Remove(purchaseOrderDetail);
}
}

purchaseOrderManager.Update(purchaseOrder);


Pertama ane ambil dulu dari database yang purchase id-nya misal 1, kemudian mapping dari PurchaseViewModel ke Purchase (Entity).
Iterate list item (ViewModel) yang dibeli, klo id detail-nya 0 di ditambahkan ke Collection-nya Purchase, klo gak 0 ane update nilai2nya.

Terakhir di iterate lagi tapi list item yang Entity, untuk mengetahui apakah ada item yang dihapus. Pas hapus itemnya ini ada error "Collection was modified; enumeration operation may not execute" kyknya krn ane hapus collection yg lagi diiterate. Nah ini gmn cara ngatasinya gan?

Andaikan ada solusinya, terakhir kan panggil method purchaseOrderManager.Update(purchaseOrder) untuk save ke database. Di method itu ane iterate lagi untuk mengupdate stoknya, object yg tadi kehapus gmn update stoknya?