在 EF Core 中如何 select 特定列并保存

In EF Core how to select specific column and also save

我有以下SQLtable

 ID INT  
 Status NVARCHAR(50)
 FileContent XML

我想使用 EF Core select IDStatus 列,但不加载 XML 列。 (因为 xml 数据可能很大,我不想将它加载到内存中,而且我正在做的业务逻辑不需要它) 然后设置 Status

public async Task DoSomwthing(int id)
{
    // select only needed columns
    var result = await _dbContext.MyTable
    .Where(x=>x.ID == id)
    .Select(x=> new 
           {
              ID = x.ID,
              Status = x.Status
           })
   .SingleOrDefaultAsync();

   // do something here using result

  // Since i am not loading the complete entity 
  // How do i set the Status here to new value


 //Save the tracked changes
 await _dbContext.SaveChangesAsync();

}

除了 Table 拆分将内容视为单独的相关实体外,EF 还支持仅选择列的更新。

因此您可以使用其属性的子集构造一个实体,然后将 non-retrieved 属性标记为未更改。例如:

public async Task DoSomething(int id)
{
    // select only needed columns
    var result = await this.Foos
    .Where(x => x.ID == id)
    .Select(x => new Foo
    {
        ID = x.ID,
        Status = x.Status
    })
    .SingleOrDefaultAsync();

        
    result.Status = 2;

    this.Entry(result).State = EntityState.Modified;
    this.Entry(result).Property(nameof(Foo.Content)).IsModified = false;

    //Save the tracked changes
    await this.SaveChangesAsync();

}
  1. 您应该使用所需的列创建一个新的class
  2. 使用自动映射器

检查自动映射器文档 这对我有用:

var teacher = _mapper.ProjectTo<TeacherReadDto>(_applicationDb.Teachers.Where(x=>x.Id==id));