1対多リレーションシップを持つ2つのエンティティ(SaleInvoiceと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");
}
}
つの時間を、一人の話者が言った、あなたは 'cough'と医者に行く場合を想像してみてください。それから1年後、あなたは「熱」に戻ります。医者はあなたのケースを開き、「咳」を削除して「発熱」を追加します。言い換えれば、あなたの取引をどこかに登録してください。 –