.net core 用AutoMapper嵌套的c#实体框架更新

.net core 用AutoMapper嵌套的c#实体框架更新,.net-core,entity-framework-core,automapper,.net Core,Entity Framework Core,Automapper,我在用.net core 1.1更新嵌套对象时遇到问题。 一旦Automapper将更改的对象映射到现有对象,我就有以下例外: System.InvalidOperationException:实体类型的实例 无法跟踪“营养”,因为此类型的另一个实例 已在跟踪具有相同密钥的。在添加新实体时, 对于大多数键类型,如果没有,将创建唯一的临时键值 设置关键点(即,如果为关键点属性指定了 其类型)。如果要显式设置新实体的键值, 确保它们不会与现有实体或临时值冲突 为其他新实体生成。在附加现有实体时, 确

我在用.net core 1.1更新嵌套对象时遇到问题。 一旦Automapper将更改的对象映射到现有对象,我就有以下例外:

System.InvalidOperationException:实体类型的实例 无法跟踪“营养”,因为此类型的另一个实例 已在跟踪具有相同密钥的。在添加新实体时, 对于大多数键类型,如果没有,将创建唯一的临时键值 设置关键点(即,如果为关键点属性指定了 其类型)。如果要显式设置新实体的键值, 确保它们不会与现有实体或临时值冲突 为其他新实体生成。在附加现有实体时, 确保只创建一个具有给定键值的实体实例 依附于上下文

方法:

public async Task<ProductDto> UpdateProduct(ProductDto productDto)
    {
      var product = await _context.Products
        .Include(x => x.Composition)
        .Include(x => x.Nutritions)
        .Include(x => x.ProductIngredient).ThenInclude(x => x.Ingredients).ThenInclude(x => x.IngredientComposition)
        .Include(x => x.ProductionProcess)
        .Where(x => x.Id == productDto.Id)
        .FirstOrDefaultAsync();
      if (!EligabilityCheck(product.CustomerId)) return null;
      await UpdateImages(productDto, product);
      _mapper.Map(productDto, product);
      await _context.SaveChangesAsync();
      return productDto;
    }
公共异步任务更新产品(ProductDto-ProductDto)
{
var product=wait\u context.Products
.Include(x=>x.Composition)
.包括(x=>x.营养)
.Include(x=>x.ProductComponent)。然后Include(x=>x.Components)。然后Include(x=>x.IngCreditComponent)
.包括(x=>x.ProductionProcess)
.Where(x=>x.Id==productDto.Id)
.FirstOrDefaultAsync();
如果(!EligabilityCheck(product.CustomerId))返回空值;
等待更新图像(productDto、product);
_mapper.Map(productDto,product);
wait_context.SaveChangesAsync();
将产品返回给客户;
}
我做错了什么?
删除的属性刚刚从对象中删除,更新的属性仍然具有相同的Id,新属性的Id=0

更新的属性仍然具有相同的Id,但它们是具有相同Id的新实例-这正是异常消息告诉您的。我认为这个包解决了这个问题。感谢Ivan Stoev,不幸的是.net core 1.1不支持Automapper.Collection.EntityFramework(我想我也需要这个包),这是否意味着我需要手动映射它?我想是的。不幸的是,我在这里的答案可能是重复的,这也回答了你的问题。更新后的答案仍然有相同的ID,但它们是具有相同ID的新实例-这正是异常消息告诉你的。我认为这个包解决了这个问题。感谢Ivan Stoev,不幸的是.net core 1.1不支持Automapper.Collection.EntityFramework(我想我也需要这个包),这是否意味着我需要手动映射它?我想是的。不幸的是,我的答案可能与你的问题相同