对第一个实体框架进行建模,而不是仅更新数据库表上的一个字段值

时间:2019-03-19 12:40:32

标签: c# asp.net-mvc-5 entity-framework-6

我正在使用模型优先体系结构为我的应用程序使用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;

0 个答案:

没有答案