这是我得到的例外:
“在 ObjectStateManager 中找不到键与所提供对象的键匹配的对象。验证所提供对象的键值是否与必须应用更改的对象的键值匹配。”
它由下一行表示:
public void UpdateTransaction(Transaction transaction)
{
db.Transactions.ApplyCurrentValues(transaction);
}
我在此页面上读到该错误可能是因为它没有附加,但是当我尝试附加它时,我得到另一个异常:
“一个实体对象不能被多个 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");
}
这是功能:
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();
// 生成新结果的随机代码
// fill the list of transaction that will be returned
transaction.Transaction_Value = result;
trasactions.Add(transaction);
}
}
return trasactions;
}
我对此一无所知,任何帮助将不胜感激。
PS:我使用 ApplyCurrentValue 的任何其他代码都可以完美运行。