У меня есть пост контроллера действия
public ActionResult Demographics(string submitButton, DemographicsViewModel model)
{
switch (submitButton)
{
case "Home":
return RedirectToAction("Index");
case "Next Page":
using (ProposalRepository proposalRepository = new ProposalRepository())
{
model.Proposal.UserID = proposalRepository.GetUserByName(MasterHelper.CurrentUsername).UserID;
model.Proposal.CustomerID = proposalRepository.GetCustomerByName(model.CustomerName).CustomerID;
if (model.Proposal.ProposalID != 0)
{
proposalRepository.Update(model.Proposal);
}
else
{
proposalRepository.AddProposal(model.Proposal);
}
proposalRepository.SaveChanges();
}
return RedirectToAction("GRQuestions", model.Proposal);
default:
return View();
}
}
Когда я пытаюсь обновить
public void Update(Proposal proposal)
{
mContext.Proposals.ApplyCurrentValues(proposal);
}
ошибка выброса: Не удалось найти объект с ключом, совпадающим с ключом предоставленного объекта, в ObjectStateManager. Убедитесь, что значения ключей предоставленного объекта соответствуют значениям ключей объекта, к которому должны применяться изменения.
Я искал решение и нашел это:
public ActionResult Demographics(string submitButton, DemographicsViewModel model)
{
switch (submitButton)
{
case "Home":
return RedirectToAction("Index");
case "Next Page":
using (ProposalRepository proposalRepository = new ProposalRepository())
{
Proposal proposal = proposalRepository.GetById(model.Proposal.ProposalID);
model.Proposal.UserID = proposalRepository.GetUserByName(MasterHelper.CurrentUsername).UserID;
model.Proposal.CustomerID = proposalRepository.GetCustomerByName(model.CustomerName).CustomerID;
if (model.Proposal.ProposalID != 0)
{
proposalRepository.Update(model.Proposal);
}
else
{
proposalRepository.AddProposal(model.Proposal);
}
proposalRepository.SaveChanges();
}
return RedirectToAction("GRQuestions", model.Proposal);
default:
return View();
}
}
добавить только одну строку:
Proposal proposal = proposalRepository.GetById(model.Proposal.ProposalID);
Это работает хорошо, но я думаю, что это глупое решение, и я считаю, что есть лучший способ и объяснение ???