我有两个实体(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;
}
}