C# 使用web api中的实体框架核心,使用移除和创建实体属性集合进行更新

C# 使用web api中的实体框架核心,使用移除和创建实体属性集合进行更新,c#,asp.net-web-api,entity-framework-core,C#,Asp.net Web Api,Entity Framework Core,我有一个模型,看起来像: public class Rack { public int Id { get; set; } public int RackRow { get; set; } public int RackSize { get; set; } public int SystemId { get; set; } public System System { get; set; } public ICollection<Module&

我有一个模型,看起来像:

public class Rack
{
    public int Id { get; set; }
    public int RackRow { get; set; }
    public int RackSize { get; set; }
    public int SystemId { get; set; }
    public System System { get; set; }
    public ICollection<Module> Modules { get; set; }
}

public class Module
{
    public int Id { get; set; }
    public byte ModuleSlot { get; set; }
    public string ModuleName { get; set; }
    public int RackId { get; set; }
    public Rack Rack { get; set; }
}
公共类机架
{
公共int Id{get;set;}
public int RackRow{get;set;}
public int RackSize{get;set;}
public int SystemId{get;set;}
公共系统系统{get;set;}
公共ICollection模块{get;set;}
}
公共类模块
{
公共int Id{get;set;}
公共字节模块lot{get;set;}
公共字符串ModuleName{get;set;}
public int RackId{get;set;}
公共机架{get;set;}
}
这些由fluentAPI中的房地产连接,如:

modelBuilder.Entity<Entities.Module>().HasOne(entity => entity.Rack).WithMany(entity => entity.Modules).HasForeignKey(entity => entity.RackId);
modelBuilder.Entity().HasOne(Entity=>Entity.Rack).WithMany(Entity=>Entity.Modules).HasForeignKey(Entity=>Entity.RackId);
现在我在WebApi中有了这个简单的更新命令:

    [HttpPut("systemId"), ActionName("UpdateRack")]
    public async Task<IActionResult> UpdateRack([FromBody]DTO.Rack requestInput, int systemId)
    {
        try
        {
            if (systemId == 0 || !requestInput.Id.HasValue) return StatusCode(StatusCodes.Status403Forbidden);
            var systemEntity = await this.systemService.GetSystem(systemId);
            if (systemEntity == null) return NotFound();

            systemEntity.Racks = this.mapper.Map(new List<DTO.Rack>{requestInput}, systemEntity.Racks);

            return Ok(await this.systemService.Update(systemEntity));
        }
        catch (Exception ex)
        {
            logger.Error(ex);
            return StatusCode(StatusCodes.Status500InternalServerError);
        }
    }
[HttpPut(“systemId”)、ActionName(“UpdateRack”)]
公共异步任务更新包([FromBody]DTO.Rack requestInput,int-systemId)
{
尝试
{
if(systemId==0 | |!requestInput.Id.HasValue)返回StatusCode(StatusCode.status403禁止);
var systemEntity=wait this.systemService.GetSystem(systemId);
if(systemEntity==null)返回NotFound();
systemEntity.Racks=this.mapper.Map(新列表{requestInput},systemEntity.Racks);
返回Ok(等待这个.systemService.Update(systemEntity));
}
捕获(例外情况除外)
{
记录器错误(ex);
返回状态码(StatusCodes.Status500InternalServerError);
}
}

现在这是可行的,但当我删除或向模块集合添加某些内容时,它不会被处理,所以我的问题是,entity framework core是否能够在update enity集合操作中添加或删除记录?

EF core仍然可以这样做

我的实体在更新第一条记录和创建新记录之前总共有2条记录

更新和创建新记录后,总共更新3条记录和第一条记录


很难回答,因为缺少
this.sytemService.Update
的代码。文章介绍了如何更新相关数据。此外,请提供代码,以及您尝试删除/添加项目的方式。如果Ef Core上下文检索到实体,则默认情况下会对其进行跟踪,这意味着您的更改将在下次调用
yourContext.SaveChanges()时自动保存