使用EF6更新实体的某些属性,而不加载整个实体

时间:2019-03-08 21:07:21

标签: c# .net entity-framework entity-framework-6

(此问题已在SO上提出,我已阅读了大多数相关文章,并尝试根据建议实施,但仍无法正常工作)

  • 我正在使用EF6(不是EF Core)
  • 我也在使用数据库优先方法。因此,我们有了.edmx文件,并且C#实体是由edmx模板创建的(不确定在这里是否重要)

我想在不加载整个实体的情况下更新实体的某些属性。

    private async Task Monitor()
    {
        var timeStamp = DateTime.UtcNow.AddHours(-8);
        var documents = await _dbContext.Documents
                        .Where(x => x.DocumentCreatedDateTime < timeStamp)
                        .Select(x => new
                        {
                            x.DocumentID,
                            x.DocumentCreatedDateTime,
                            x.ProcessStatusID,
                            ProcessStatus = x.ProcessStatus.ProcessStatusName,
                            x.CurrentErrors,
                            x.ModifiedDateTime,
                            x.VersionStamp                                
                        })
                        .ToListAsync();

        if (documents.Count == 0)
        {
            return;
        }

        foreach (var document in documents)
        {  
            var docEntity = new Document();

            docEntity.DocumentID = document.DocumentID;
            docEntity.CurrentErrors = "Document has error";
            docEntity.ProcessStatusID = (int)StatusEnum.Error;
            docEntity.ModifiedDateTime = DateTime.UtcNow;
            docEntity.VersionStamp = document.VersionStamp;

            _dbContext.Documents.Attach(docEntity);
            var entry = _dbContext.Entry(docEntity);
            entry.Property(p => p.CurrentErrors).IsModified = true;
            entry.Property(p => p.ProcessStatusID).IsModified = true;
            entry.Property(p => p.ModifiedDateTime).IsModified = true;
            entry.Property(p => p.VersionStamp).IsModified = true;
        }           

        await _dbContext.SaveChangesAsync().ConfigureAwait(false);
    }

问题
文档实体具有数据库中所需的其他几个属性(列)。但是此特定过程不需要更新那些属性。当SaveChanges()被调用时,我得到EntityValidationErrors错误

更新1
我认为我可以做db.Configuration.ValidateOnSaveEnabled = false,但不确定是不是正确的方法

  

必填xxxxx字段。

0 个答案:

没有答案