2010-07-10 167 views
2

我有一個發票實體,它有子級InvoiceLog實體。當我第一次創建發票並添加其InvoiceLog實體並保存時,它工作正常。但是,如果我編輯發票並嘗試添加其他InvoiceLog實體,它將完全忽略新的InvoiceLog實體,並且根本不保存它們。任何想法我做錯了什麼?實體框架 - 更新時保存子實體

//POST: /Secure/Invoices/Save/ 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Save(Invoice invoice) 
     { 
      invoice.UpdateDate = DateTime.Now; 
      invoice.DeveloperID = Developer.DeveloperID; 
      invoice.InvoiceStatusID = (int)Enums.InvoiceStatus.Open; 
      if (invoice.InvoiceID == 0) 
      {//inserting new invoice. 
       DataContext.InvoiceData.Insert(invoice); 
      } 
      else 
      {//attaching existing invoice. 
       DataContext.InvoiceData.Attach(invoice); 
      } 
      AddHours(invoice); 
      //save changes. 
      DataContext.SaveChanges(); 
      //redirect to invoice list. 
      return RedirectToAction("Index"); 
     } 

     private void AddHours(Invoice invoice) 
     { 
      //get existing logs. 
      IQueryable<InvoiceLog> existingLogs = null; 
      if(invoice.InvoiceID > 0) 
      { 
       existingLogs = DataContext.InvoiceData.GetLogs(invoice.InvoiceID); 
      } 
      //create new logs. 
      var numDays = invoice.EndDate.Subtract(invoice.StartDate).TotalDays; 
      for (int k = 0; k <= numDays; k++) 
      { 
       //check if log already exists. 
       var existingLog = existingLogs.ToList().FindIndex(l => l.LogDate == invoice.StartDate.AddDays(k)); 
       if (existingLog == -1) 
       { 
        //add new log. 
        var log = new InvoiceLog(); 
        log.CreateDate = DateTime.Now; 
        log.UpdateDate = DateTime.Now; 
        log.Hours = 0; 
        log.InvoiceID = invoice.InvoiceID; 
        log.LogDate = invoice.StartDate.AddDays(k); 
        invoice.InvoiceLogs.Add(log); 
       } 
      } 
     } 

感謝, 賈斯汀

+0

當更新 - 它保存的其他發票的性質,或者是他們忽略以及作爲invoiceLogs? – Yakimych 2010-07-10 19:35:49

回答

0

你可以嘗試安裝之前添加InvoiceLogs項目invoice

else 
    {//attaching existing invoice. 
     AddHours(invoice); 
     DataContext.InvoiceData.Attach(invoice); 
    }