Я пытаюсь обновить сложную модель в одном представлении.
Я использую 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; }
}
Используя ту же модель представления, я могу создать объект транзакции, который будет заполнять базу данных следующим образом.
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 в одном представлении.