【发布时间】:2012-02-10 00:16:47
【问题描述】:
我正在尝试在单个视图中更新复杂模型。 我正在使用 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 对象内任何导航属性中的任何字段(属性)。
【问题讨论】:
标签: asp.net-mvc entity-framework ef-code-first unit-of-work