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()时自动保存