我正在使用模型优先体系结构为我的应用程序使用Entityframework。除了我今天遇到的奇怪问题,它在任何地方都可以正常工作。
基本上,我们有一个Project
表和一个Entity
表。项目和实体之间有一个关联表,称为ProjectEntityLink
表。现在,您可以从“项目”页面和“实体”页面更新ProjectEntityLink
表的属性。这两个页面在弹出窗口中使用相同的局部视图,并使用相同的更新代码来更新ProjectEntityLink
表上的属性。现在,当我从“实体”页面更新链接关联属性时,它可以很好地工作,但是如果从“项目”页面更新链接关联属性,那么它会做一些奇怪的事情。即使两个地方的代码相同,它也会更新除一个名为StartApplyDate
的属性以外的所有属性。
有人可以提出这个问题的原因和解决方案吗?
更新
这是数据更新的代码。如前所述,在相同的局部视图格式的2个不同页面上使用了相同的代码。它在一个地方工作正常,而在另一个地方工作良好。
if (_prevDataChangeStartApplyDate != projectEntityLink.DataChangeStartApplyDate)
{
_projectEntityLinkToUpdate.StartApplyDate = projectEntityLink.DataChangeStartApplyDate;
//if the change apply date has changed then create an historic record based on the current state
DateTime _historyrecord_startApplyDate = projectEntityLink.StartApplyDate.HasValue ? projectEntityLink.StartApplyDate.Value : projectEntityLink.CollectionStartDate;
DateTime _historyrecord_endApplyDate = projectEntityLink.DataChangeStartApplyDate.Value.AddDays(-1);
projectEntityLink_History _prevLink = _unitOfWork.Projects.GetNewProjectLinkHistory(_projectEntityLinkToUpdate.ID,_projectEntityLinkToUpdate.ProjectID,
_projectEntityLinkToUpdate.LinkID,_historyrecord_startApplyDate,
_historyrecord_endApplyDate,_projectEntityLinkToUpdate.DatasetVersionID,_projectEntityLinkToUpdate.TUID,
_projectEntityLinkToUpdate.PeriodLengthID);
_unitOfWork.projectEntityLinks_History.Add(_prevLink);
}
else
{
_projectEntityLinkToUpdate.StartApplyDate = projectEntityLink.StartApplyDate;
}
_projectEntityLinkToUpdate.DataChangeStartApplyDate = projectEntityLink.DataChangeStartApplyDate;
_projectEntityLinkToUpdate.LinkID = projectEntityLink.LinkID;
_projectEntityLinkToUpdate.EndApplyDate = projectEntityLink.EndApplyDate;
_projectEntityLinkToUpdate.TUID = projectEntityLink.TUID;
_projectEntityLinkToUpdate.DatasetVersionID = projectEntityLink.DatasetVersionID;
_projectEntityLinkToUpdate.PeriodLengthID = projectEntityLink.PeriodLengthID;
_unitOfWork.projectEntityLinks.Edit(_projectEntityLinkToUpdate);
int recordsUpdated = _unitOfWork.SaveChanges();
if (recordsUpdated > 0)
return _projectEntityLinkToUpdate;
else
return null;