Я пытаюсь обновить сложную модель в одном представлении. Я использую ASP.NET MVC3, Entity Framework с Code first, unit of work, generic repository pattern... но когда я пытаюсь обновить модель, я получаю эту ошибку:
Произошло нарушение ограничения ссылочной целостности: Значения свойств, определяющих ссылочные ограничения, не согласованы между главными и зависимыми объектами в отношениях.
Вот моя упрощенная модель представления:
public class TransactionViewModel
{
public Transaction Transaction { get; set; }
public bool IsUserSubmitting { get; set; }
public IEnumerable<SelectListItem> ContractTypes { get; set; }
}
Вот моя упрощенная сложная модель, и в качестве примера одно из ее навигационных свойств. Транзакция имеет отношения один к одному со всеми своими навигационными свойствами:
public class Transaction
{
[Key]
public int Id { get; set; }
public int CurrentStageId { get; set; }
public int? BidId { get; set; }
public int? EvaluationId { get; set; }
public virtual Stage CurrentStage { get; set; }
public virtual Bid Bid { get; set; }
public virtual Evaluation Evaluation { get; set; }
}
public class Bid
{
[Key]
public int Id { get; set; }
public string Type { get; set; }
public DateTime? PublicationDate { get; set; }
public DateTime? BidOpeningDate { get; set; }
public DateTime? ServiceDate { get; set; }
public string ContractBuyerComments { get; set; }
public string BidNumber { get; set; }
public DateTime? ReminderDate { get; set; }
public DateTime? SubmitDate { get; set; }
}
Используя ту же модель представления, я могу создать объект транзакции, который будет заполнять базу данных следующим образом.
Id: 1, CurrentStageId: 1, BidId: 1, EvaluationId: 1
но, когда я пытаюсь обновить свойства внутри этих навигационных свойств, эта строка вызывает ошибку, в контроллере:
[HttpPost]
public ActionResult Edit(TransactionViewModel model)
{
if (ModelState.IsValid)
{
-> unitOfWork.TransactionRepository.Update(model.Transaction);
unitOfWork.Save();
return RedirectToAction("List");
}
}
В общем хранилище:
public virtual void Update(TEntity entityToUpdate)
{
-> dbSet.Attach(entityToUpdate);
context.Entry(entityToUpdate).State = EntityState.Modified;
}
Проблема усложняется тем, что я должен иметь возможность редактировать любое из полей (свойств) в любом из навигационных свойств в объекте Transaction в рамках одного представления.