我试图更新ProjectModel内ProjectEmployees的集合。 我想删除所有旧值并设置新值。实体框架核心 - 更新相关集合
我的模型:
public class Project
{
...
public ICollection<ProjectEmployee> ProjectEmployees { get; set; }
}
public class ProjectEmployee
{
public int ProjectId { get; set; }
public virtual Project Project { get; set; }
public int UserId { get; set; }
public virtual Employee Employee { get; set; }
}
public class Employee
{
public int UserId { get; set; }
public User User { get; set; }
...
}
public class ProjectGroupModel //ViewModel
{
public int ProjectId { get; set; }
public ICollection<Employee> ProjectEmployees { get; set; }
}
这是典型的多对一对多的关系。
我的控制器动作:
[HttpPost("group")]
public async Task<IActionResult> CreateGroup([FromBody] ProjectGroupModel pro)
{
var dbProject = await _context.Project
.Include(p=>p.ProjectEmployees)
.FirstAsync(p => p.ProjectId == pro.ProjectId);
dbProject.ProjectEmployees.Clear();
foreach (var emp in pro.ProjectEmployees)
{
dbProject.ProjectEmployees.Add(new ProjectEmployee()
{
UserId = emp.UserId
});
}
await _context.SaveChangesAsync();
return Ok();
}
当pro.ProjectEmployees是空的dbProject.ProjectEmployees所有记录被正确删除,此外,如果dbProject.ProjectEmployees是从模型空的新记录加入,但是当dbProject.ProjectEmployees是不是空的,我不能创下新的记录:
错误:
"The instance of entity type 'ProjectEmployee' cannot be tracked because another instance of this type with the same key is already being tracked. When adding new entities, for most key types a unique temporary key value will be created if no key is set (i.e. if the key property is assigned the default value for its type). If you are explicitly setting key values for new entities, ensure they do not collide with existing entities or temporary values generated for other new entities. When attaching existing entities, ensure that only one entity instance with a given key value is attached to the context."
我试图修复在数百这个动作但总是这样做是错误的。
应该转换dbProject使用ToList方法列出使用这个扩展我做了,除去未选中并添加新的选择列表
。然后尝试更新它 –
在我看来,像主要关键冲突。当您创建新的ProjectEmployee()时,您只能设置UserId。你不应该也设置ProjectId? –
“ProjectEmployee”的PK是什么? –