Я пытаюсь обновить сложную модель в одном представлении. Я использую ASP.NET MVC3, Entity Framework сначала с кодом, единицей работы, общим шаблоном репозитория... но когда я пытаюсь обновить модель, я получаю эту ошибку:
Произошло нарушение ограничения ссылочной целостности: значения свойств, определяющие ссылочные ограничения, не согласованы между основным и зависимыми объектами в отношении.
Вот моя упрощенная модель представления:
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; }
}
Используя ту же модель представления, я могу создать объект транзакции, который будет заполнять базу данных следующим образом.
Идентификатор: 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;
}
Проблема еще более усложняется, поскольку я должен иметь возможность редактировать любые поля (свойства) в любом свойстве навигации в объекте транзакции в одном представлении.