Entity framework 当我向API发送HTTP PUT update请求时,EF Core 3.1正在用DTO中的空值覆盖所有字段 上下文

Entity framework 当我向API发送HTTP PUT update请求时,EF Core 3.1正在用DTO中的空值覆盖所有字段 上下文,entity-framework,asp.net-core,entity-framework-core,automapper,asp.net-core-webapi,Entity Framework,Asp.net Core,Entity Framework Core,Automapper,Asp.net Core Webapi,我用CRUD操作设置了一个API—我在更新实体时使用HTTP PUT端点时遇到了问题。我只希望API能够更新实体的一些字段,因此我使用数据传输对象(DTO),并使用AutoMapper将其映射到实体框架核心(EF核心)的域模型,以更新数据库中的实体。当使用AutoMapper从DTO映射到域模型时,将添加空值,然后在数据库中覆盖这些值。我怎样才能防止这种情况发生 代码 PlayerController.cs [HttpPut(“{id}”)] 公共异步任务PutPlayer(Guid id,Pl

我用CRUD操作设置了一个API—我在更新实体时使用HTTP PUT端点时遇到了问题。我只希望API能够更新实体的一些字段,因此我使用数据传输对象(DTO),并使用AutoMapper将其映射到实体框架核心(EF核心)的域模型,以更新数据库中的实体。当使用AutoMapper从DTO映射到域模型时,将添加空值,然后在数据库中覆盖这些值。我怎样才能防止这种情况发生

代码 PlayerController.cs

[HttpPut(“{id}”)]
公共异步任务PutPlayer(Guid id,PlayerUpdateDto PlayerUpdateDto)
{
Player Player=\u mapper.Map(playerUpdateDto);
_context.Entry(player.State=EntityState.Modified;
尝试
{
wait_context.SaveChangesAsync();
}
catch(DbUpdateConcurrencyException)
{
如果(!PlayerExists(id))
{
返回NotFound();
}
其他的
{
投掷;
}
}
返回Ok(播放器);
}
Player.cs

公共类播放器
{
[关键]
公共Guid Id{get;set;}
[必需]
公共字符串名称{get;set;}
公共双重评级{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
公共ICollection matcheOne{get;set;}
公共ICollection MatchesTwo{get;set;}
公共ICollection匹配三个{get;set;}
公共ICollection匹配四个{get;set;}
}
PlayerUpdateDto.cs

公共类播放器更新为
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
}
玩家评级、创建和更新的属性都设置为空值,但我希望它们保持不变,因为它们不在DTO中。任何和所有的帮助将不胜感激

这个

 _context.Entry(player).State = EntityState.Modified;
将所有属性标记为已修改。相反,只标记要更新的。乙二醇

 _context.Entry(player).Property(p => p.Name).IsModified = true;

这很有帮助。非常感谢。是时候去了解更多关于实体框架核心的信息了!如果我不知道客户端将要更新哪个属性呢?有什么动态的方法可以做到这一点吗?