c#实体框架更新嵌套在AutoMapper中

时间:2017-09-30 15:47:55

标签: entity-framework .net-core automapper

我在使用.net核心1.1更新嵌套对象时遇到问题。 一旦Automapper将更改的对象映射到现有对象,我就会遇到以下异常:

  

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

方法:

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;
    }

我做错了什么? 删除的属性只是从对象中删除,更新的属性仍然具有相同的ID,新的属性具有Id = 0

感谢您的帮助 ķ

0 个答案:

没有答案