これは私が得る例外です:
「提供されたオブジェクトのキーと一致するキーを持つオブジェクトが ObjectStateManager で見つかりませんでした。提供されたオブジェクトのキー値が、変更を適用する必要があるオブジェクトのキー値と一致することを確認してください。」
次の行で削除されます。
public void UpdateTransaction(Transaction transaction)
{
db.Transactions.ApplyCurrentValues(transaction);
}
このページで、添付されていないためにエラーが発生する可能性があることを読みましたが、添付しようとすると別の例外が発生します。
「エンティティ オブジェクトは、IEntityChangeTracker の複数のインスタンスによって参照できません。」
これは、レコードがすでにモデルに関連付けられていることを意味します。
そして、それを切り離そうとすると、次のようになります:
「オブジェクトは ObjectStateManager にアタッチされていないため、デタッチできません。」
これは、テーブル「InputValue」を更新するコントローラーです。値に応じて、updatedTransactions 関数によって行われるテーブル「Transaction」も更新したいと考えています。
[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 を使用する他のコードは完全に機能します。