Entity framework 4 实体框架-如何保存子实体

Entity framework 4 实体框架-如何保存子实体,entity-framework-4,Entity Framework 4,我正在使用.NET 4 EF,并试图保存实体(发票)的子实体(发票日志)。在表单提交时,我有一个分离的invoice对象,该对象将修改后的InvoiceLog实体的EntityCollection传递给我的控制器操作。然后,我将发票附加到数据上下文并调用SaveChanges。问题是,这只保存发票,而不保存修改后的InvoiceLog实体。如果我尝试单独附加InvoiceLog实体,则会出现以下错误: ObjectStateManager中已存在具有相同密钥的对象。ObjectStateMana

我正在使用.NET 4 EF,并试图保存实体(发票)的子实体(发票日志)。在表单提交时,我有一个分离的invoice对象,该对象将修改后的InvoiceLog实体的EntityCollection传递给我的控制器操作。然后,我将发票附加到数据上下文并调用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

成功了,我需要在隐藏字段中填充InvoiceLogID和InvoiceID,以便在EntityCollection中填充它们