我正在尝试在单个视图中更新复杂模型。
我正在使用 ASP.NET MVC3、代码优先的实体框架、工作单元、通用存储库模式。
但是当我尝试更新模型时,出现以下错误:
发生参照完整性约束违规:定义参照约束的属性值在关系中的主体对象和从属对象之间不一致。
这是我的简化视图模型:
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 对象内任何导航属性内的任何字段(属性)。