我有一个非常简单的模型,在这里看到:EF4引用完整性异常使用代码优先?
public class Cases
{
//case data model for call center
//implement lists for all related child tables too
[Key]
public int CasesID { get; set; }
public string CaseNumber { get; set; }
[Required(ErrorMessage = "Customer is Required")]
public int CustomerID { get; set; }
public Customer Customer { get; set; }
[MaxLength(50)]
public string UserName { get; set; } //get user name from the aspnet membership
[Required(ErrorMessage = "Case Category is Required")]
public int CaseCategoryID { get; set; }
[Required(ErrorMessage = "Technician is Required")]
public int TechnicianID { get; set; }
public Technician Technicians { get; set; }
[Required(ErrorMessage = "Engine Model is Required")]
public int EngineModelID { get; set; }
public EngineModel EngineModel { get; set; }
[MaxLength(50)]
public string BMSWorkorder { get; set; }
[MaxLength(50)]
[Required(ErrorMessage = "Status is Required")]
public string CaseStatus { get; set; }
[MaxLength(50)]
public string OpenedBy { get; set; }
[Required(ErrorMessage = "Opened Date is Required")]
[DataType(DataType.DateTime)]
public DateTime? OpenedDate { get; set; }
[MaxLength(50)]
public string ClosedBy { get; set; }
[DataType(DataType.DateTime)]
public DateTime? ClosedDate { get; set; }
[MaxLength(50)]
[Required(ErrorMessage="Caller First Name is Required")]
public string CallerFirstName { get; set; }
[MaxLength(50)]
[Required(ErrorMessage = "Caller Last Name is Required")]
public string CallerLastName { get; set; }
[MaxLength(10)]
[Required(ErrorMessage = "Qualified is Required")]
public string Qualified { get; set; }
public string Description { get; set; }
[MaxLength(50)]
[Required(ErrorMessage = "ESN is Required")]
public string ESN { get; set; }
[MaxLength(50)]
[Required(ErrorMessage = "Mileage is Required")]
public string Mileage { get; set; }
[DataType(DataType.Date)]
public DateTime? DateInService { get; set; }
[MaxLength(50)]
public string ESTR { get; set; }
[MaxLength(50)]
[Required(ErrorMessage = "EDS is Required")]
public string EDS { get; set; }
[MaxLength(50)]
public string GensetSerialNumber { get; set; }
[MaxLength(50)]
public string GensetModelNumber { get; set; }
//child Case Notes records
public virtual ICollection<CaseNotes> CaseNotes { get; set; }
//child case attachment records
public virtual ICollection<Attachment> Attachments { get; set; }
//child case complaint records
public virtual ICollection<CaseComplaint> CaseComplaint { get; set; }
//tracking fields
public DateTime? CreatedOn { get; set; }
[MaxLength(50)]
public string CreatedBy { get; set; }
public DateTime? ModifiedOn { get; set; }
[MaxLength(50)]
public string ModifiedBy { get; set; }
}
一个案例可以有很多CaseNotes,附件和CaseComplaints。外键是技术人员,客户和EngineModel。
直到今天,所有这一切都很好与添加和编辑模型。现在,我得到了 “”发生了参照完整性约束冲突:定义参照约束的属性值在关系中的主体和从属对象之间不一致“ 仅当尝试更新案例记录时编辑视图。由于所有必填字段都已填充,因此创建并插入是正确的。 这为什么刚刚开始发生。仅供参考,如果我检查模型只是为了调用context.SaveChanges,我注意到所有的数据都看起来正确,FK值被填充,但外键类(技术人员)的导航属性中的数据几乎看起来像它认为我试图插入这些类中的一个新的纪录......
这里是我的控制器编辑操作:
public ActionResult Edit(int id)
{
Cases cases = db.Cases.Find(id);
db.Entry(cases).Reference(x => x.Customer).Load();
db.Entry(cases).Collection(x => x.CaseComplaint).Load();
db.Entry(cases).Collection(x => x.CaseNotes).Load();
db.Entry(cases).Reference(x => x.Technicians).Load();
GetCaseCategoryLookup(cases.CaseCategoryID);
GetEngineModelLookup(cases.EngineModelID);
GetTechnicianLookup(cases.TechnicianID);
GetQualifiedList(cases.Qualified);
GetCaseStatusList(cases.CaseStatus);
return View(cases);
}
//
// POST: /Cases/Edit/5
[HttpPost]
public ActionResult Edit(Cases cases)
{
if (ModelState.IsValid)
{
AppHelpers help = new AppHelpers();
if (cases.CaseStatus == "CLOSED")
{
cases.ClosedBy = "USER";
cases.ClosedDate = help.GetEasternTime();
}
cases.ModifiedBy = "USER";
cases.ModifiedOn = help.GetEasternTime();
db.Entry(cases).State = EntityState.Modified;
db.SaveChanges();
}
return RedirectToAction("Index");
}
“但是,导航属性中的数据几乎看起来像它认为我试图插入一个新的记录在这些类*”:那么,这是一个视图和模型绑定问题或导航属性值来自哪里? – Slauma 2012-07-11 19:12:31
我是一个noob,所以你将不得不忍受我。技术人员和客户以及EngineModel上面的属性应该只是允许我显示子数据,但好像它们被标记为随着案例类一起被修改。 – Ryan 2012-07-11 19:27:19
我认为如果您可以显示发布后操作以及如何处理数据直至SaveChanges会很有帮助。 – Slauma 2012-07-11 19:30:21