Automapper для обновления DTO с отношениями - PullRequest
0 голосов
/ 19 марта 2019

Я пытаюсь обновить сущность моего продукта, используя automapper. Сущность продукта имеет отношение к сущности variOption. Когда я выполняю обновление, я получаю исключение: "InvalidOperationException: экземпляр типа сущности 'VariOption' не может быть отслежен, поскольку другой экземпляр с таким же значением ключа для {'Id'} уже отслеживается. При присоединении существующих объектов убедитесь, что только один экземпляр объекта с данным значение ключа прилагается. "

Может ли кто-нибудь посоветовать мне это?

Product.cs

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public ICollection<VariOption> VariOptions { get; set; }

    public Product() 
    {
        VariOptions = new Collection<VariOption>();
    }
}

VariOption.cs

public class VariOption
{
    public int Id { get; set; }
    public string OptName { get; set; } 
    public Product Product { get; set; }
    public int ProductId { get; set; }
}

ProductForUpdateDto.cs

public class ProductForUpdateDto
{
    public int Id { get; set; }
    [Required]
    public string Name { get; set; }

    public ICollection<VariOptionForUpdateDto> VariOptions { get; set; }
}

VariOptionForUpdateDto.cs

public class VariOptionForUpdateDto
{
    public int Id { get; set; }
    [Required]
    public string OptName { get; set; }

    public ICollection<VariOptionTwoForUpdateDto> VariOptionTwos { get; set; }
}

MapperProfile

CreateMap<ProductForUpdateDto, Product>();
CreateMap<VariOptionForUpdateDto, VariOption>();

UpdateProductController

public async Task<IActionResult> UpdateProduct([FromBody] ProductForUpdateDto productForUpdateDto)
    {

        var productFromRepo = await _product.GetProduct(productForUpdateDto.Id);



        _mapper.Map(productForUpdateDto, productFromRepo);

        if(await _product.SaveAll())
        {
            return Ok();
        }

        return BadRequest("$Updating product {productForSaveDto.Id} failed on {type}");
    }
...