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