0

这是例外,我得到实体键:.ApplyCurrentValues抛出异常,说明不匹配

“与匹配所提供的对象的密钥无法在ObjectStateManager找到一个关键的对象验证键值提供的对象的键值与必须应用更改的对象的键值匹配。“

它是由下一行trown:

public void UpdateTransaction(Transaction transaction) 
{ 
    db.Transactions.ApplyCurrentValues(transaction); 
} 

我这个页面上阅读该错误可能becouse它没有连接,但是当我尝试将它,我得到另一个异常:

“一个实体对象不能被IEntityChangeTracker的多个实例引用。”

通过做一些阅读,这意味着该记录已附加到模型。

,当我尝试将其卸下,我得到了下:

“的对象不能分离,因为它没有连接到ObjectStateManager。”

这是我的控制器,我更新表“InputValue”,现在取决于值我也想更新表“Transaction”,这是由updatedTransactions函数完成的。

[HttpPost] 
    public ActionResult Edit(int id, FormCollection collection) 
    { 
     var inputValue = inputValueRespository.GetInputValue(id); 

     if (inputValue == null) 
      return RedirectToAction("Index"); 

     try 
     { 
      UpdateModel(inputValue, collection.ToValueProvider()); 
      inputValue.InputValues_EditUser = WindowsIdentity.GetCurrent().Name; 
      inputValue.InputValues_EditDate = DateTime.Today.Date; 
      inputValueRespository.UpdateInputValue(inputValue); 
      List<Transaction> updatedTransactions = inputValueRespository.HasTransactions(inputValue.Input_ID, inputValue.InputValues_Date, inputValue.InputValues_Week, inputValue.InputValues_Quarter); 
      for (int i = 0; i < updatedTransactions.Count; i++) 
      { 

       transactionRepository.UpdateTransaction(updatedTransactions[i]); 
      } 
      inputValueRespository.save(); 
      return RedirectToAction("Create"); 
     } 
     catch (Exception) 
     { 
      return View("Create"); 
     } 

这是功能:产生新的结果

   // fill the list of transaction that will be returned   
       transaction.Transaction_Value = result; 
       trasactions.Add(transaction); 
      } 
     } 
     return trasactions; 
    } 

我在这一个完全地无能

public List<Transaction> HasTransactions(int id, DateTime date, string week, string quarter) 
    { 
     // random code that decides if transaction should be update 
     Transaction transaction = new Transaction(); 
      transaction = (from a in db.Transactions where a.KPI_ID == kpiId && a.Transaction_Period == period select a).SingleOrDefault(); 

//随机码,任何帮助,将不胜感激。 PS:其他代码我使用ApplyCurrentValue完美的作品。

回答

0

我终于得到它的工作(通过试验和错误)

最后,我需要的分离对象,将其附加,修改申请,然后保存。

db.Transactions.Detach(transaction); 
db.Transactions.Attach(transaction); 
transaction.Transaction_Value = result; 
db.Transactions.ApplyCurrentValues(transaction); 
db.SaveChanges(); 

不使一个很大的意义,但我想这只是它的工作方式:)