public async Task <ActionResult <Project> > PatchAsync(string id, CancellationToken cancellationToken) { //3- 动态更新字段 利用反射 var originProject = await _lighterDbContext.Projects.FirstOrDefaultAsync(p => p.Id == id, cancellationToken); if (originProject == null) { return(NotFound()); } var properties = _lighterDbContext.Entry(originProject).Properties.ToList(); foreach (var query in HttpContext.Request.Query) { var property = properties.FirstOrDefault(p => p.Metadata.Name == query.Key); if (property == null) { continue; } var currentValue = Convert.ChangeType(query.Value.First(), property.Metadata.ClrType); _lighterDbContext.Entry(originProject).Property(query.Key).CurrentValue = currentValue; _lighterDbContext.Entry(originProject).Property(query.Key).IsModified = true; } await _lighterDbContext.SaveChangesAsync(); return(originProject); }
public async Task<IActionResult> GetAsync(string id, CancellationToken cancellationToken) { //// 预先加载 //var project = await _lighterDbContext.Projects.Include(p => p.Groups) // .FirstOrDefaultAsync(p => p.Id == id, cancellationToken); // 显式加载 var project = await _lighterDbContext.Projects.FirstOrDefaultAsync(p => p.Id == id, cancellationToken); await _lighterDbContext.Entry(project).Collection(p => p.Groups).LoadAsync(cancellationToken); //// 延迟加载 //project.Groups// 引用到属性时才加载 //foreach (var project in _lighterDbContext.Projects) //{ // project.Groups// 多次查询数据库 //} //// 一次性查询 //var projects = _lighterDbContext.Projects.ToList(); return Ok(project); }