最佳实践更新和删除通过导航属性删除实体



我有两个实体(saleinvoice and Saleinvoicedetail),其中一项是一对多关系。我添加的该代码正在工作,但我想知道从这种导航属性中更新或删除值的最佳实践是什么(在我的saleinvoicedetails案例中)。这样做的最好方法是什么?

这是模型设计师视图

 private void bbUpdate_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
    {
        var saleInvoiceInDb= _dbContext.SaleInvoices.Find(_id);
        if (saleInvoiceInDb == null) return;
        var saleInvoiceDetails = ((IEnumerable) gvSaleInvoiceDetails.DataSource).Cast<SaleInvoiceDetail>().ToList();
        using (var context = new ErpDbContext())
        {
            foreach (var saleInvoiceDetail in saleInvoiceDetails)
            {
               if (saleInvoiceDetail.Id != 0)
                {
                    var invoiceDetailInDb = context.SaleInvoiceDetails.Find(saleInvoiceDetail.Id);
                    invoiceDetailInDb = saleInvoiceDetail;
                    invoiceDetailInDb.SaleInvoiceId = saleInvoiceInDb.Id;
                }
                else
                {
                    saleInvoiceDetail.SaleInvoiceId = saleInvoiceInDb.Id;
                    context.SaleInvoiceDetails.Add(saleInvoiceDetail);
                }
                context.SaveChanges();
            }
        }
        saleInvoiceInDb.CompleteDateTime = DateTime.Today;
        saleInvoiceInDb.ContranctCode = "";
        saleInvoiceInDb.DateTimeAdded = DateTime.Now;
        saleInvoiceInDb.DateTimeUpdated = DateTime.Now;
        saleInvoiceInDb.DeliveryDateTime = txtDeliveryDate.DateTime;
        saleInvoiceInDb.DueDateTime = txtDueDateTime.DateTime;
        saleInvoiceInDb.InvoiceDescription = txtDescription.Text;
        saleInvoiceInDb.InvoiceToAdress = txtinvoiceToAdress.Text;
        saleInvoiceInDb.Period = new DateTime(txtPeriod.DateTime.Year, txtPeriod.DateTime.Month, 1);
        saleInvoiceInDb.SaleType = txtSoType.Text;
        saleInvoiceInDb.Status = (byte)txtStatus.ItemIndex;
        saleInvoiceInDb.SupplierId = _supplierId;
        saleInvoiceInDb.SupplierCode = txtSupplierCode.Text;
        saleInvoiceInDb.SupplierInvoiceReference = "";
        saleInvoiceInDb.TransactionDateTime = txtTransactionDate.DateTime;
        saleInvoiceInDb.OrderDate = txtOrderDate.DateTime;
        saleInvoiceInDb.OrderPeriod = new DateTime(txtOrderDate.DateTime.Year, txtOrderDate.DateTime.Month, 1);
        saleInvoiceInDb.UserAdded = clsUserProfile.US_LOGIN;
        saleInvoiceInDb.UserUpdated = clsUserProfile.US_LOGIN;
        _dbContext.SaveChanges();
        Messages.Information("Invoice updated successfully");
    }
}

如果进行删除条件:

if (saleInvoiceDetail.Id != 0)
{
    var invoiceDetailInDb = context.SaleInvoiceDetails.Find(saleInvoiceDetail.Id);
    if(invoiceDetailInDb == null) DoDelete();
    else{
         invoiceDetailInDb = saleInvoiceDetail;
         invoiceDetailInDb.SaleInvoiceId = saleInvoiceInDb.Id;
    }
}

最新更新