Платформа объекта - Как сохранить дочерние объекты

Я использую.NET 4 EF и пытаюсь сохранить дочерние объекты (InvoiceLogs) объекта (Счет). На форме утверждают, что у меня есть отдельный объект счета, который имеет EntityCollection измененных объектов InvoiceLog, переданных моему действию контроллера. Я затем присоединяю счет к контексту данных и называю SaveChanges. Проблема состоит в том, что это только сохраняет Счет, он не сохраняет измененные объекты InvoiceLog. Если я пытаюсь присоединить объекты InvoiceLog отдельно затем, это дает мне следующую ошибку:

Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отследить несколько объектов с тем же ключом.

Как я сохраняю дочерние объекты в EF 4??

//POST: /Secure/Invoices/SaveHours/
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult SaveHours([Bind(Exclude = "InvoiceLogs")]Invoice invoice)
        {
            TryUpdateModel(invoice.InvoiceLogs, "InvoiceLogs");
            invoice.UpdateDate = DateTime.Now;
            invoice.DeveloperID = Developer.DeveloperID;
            //attaching existing invoice.
            DataContext.InvoiceData.Attach(invoice);
            //attach invoice hours.
            foreach (var log in invoice.InvoiceLogs)
            {
                DataContext.InvoiceData.AttachLog(log);
            }
            //save changes.
            DataContext.SaveChanges();
            //redirect to invoice list.
            return RedirectToAction("Index");
        }

public static void Attach(Invoice invoice)
            {
                var i = new Invoice { InvoiceID = invoice.InvoiceID };
                db.Invoices.Attach(i);
                db.Invoices.ApplyCurrentValues(invoice);
            }

            public static void AttachLog(InvoiceLog log)
            {
                var i = new InvoiceLog { InvoiceLogID = log.InvoiceLogID };
                db.InvoiceLogs.Attach(i);
                db.InvoiceLogs.ApplyCurrentValues(log);
            }

Спасибо, Justin

1
задан Justin 13 June 2010 в 17:51
поделиться

1 ответ

Все заработало, мне нужно было заполнить InvoiceLogID и InvoiceID в скрытых полях, чтобы они попали в EntityCollection.

2
ответ дан 2 September 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: