Обновление, приводящее к потере / удалению данных - PullRequest
0 голосов
/ 14 марта 2020

Я использую. Net Core 3.1, я пытался обновить данные, которые были получены с отложенной загрузкой.

    [HttpPost("update")]
    public async Task<IActionResult> Update([FromBody] FooDto fooDto){
        var foo = await _context.Foo
        .Include( x => x.Bar)
        .Where(x => x.Id == fooDto.Id).SingleOrDefaultAsync();
        if(foo == null)
            return BadRequest("Foo not found");
        _mapper.Map<FooDto, Foo>(fooDto, foo);
        if(await _context.SaveChangesAsync() > 0){
            fooDto = _mapper.Map<Foo, FooDto>(foo);
            return Ok(fooDto);
        }
        throw new Exception("Cannot update Foo");
    }

Сам FooDto: publi c class FooDto {publi c int Id {get; набор; } publi c string FooName {get; набор; } publi c int BarId {get; набор; } publi c BarDto Bar {get; набор; }}

Я отправляю эти данные из Почтальона для проверки:

{
    "id": 1,
    "fooName": "fooUpdate1",
    "barId": 1
}

и бум .. данные были удалены из моей базы данных. Ошибок не было. Мне было интересно, почему это происходит.

Но если я попробую

var foo = await _context.Foo
            .Where(x => x.Id == fooDto.Id).SingleOrDefaultAsync();

Это будет хорошо работать и обновит запись. Это ошибка в ядре EF / Mysql Помело? или мне не нужно извлекать данные с отложенной загрузкой для обновления?

примечание: я использую. Net Core 3.1, AutoMapper 9, Pomelo Mysql 3.1 и EF Core 3.1.1

  <ItemGroup>
    <PackageReference Include="AutoMapper" Version="9.0.0" />
    <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="3.1.1" />
    <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="3.1.1" />
    <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />    
    <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.1.1" />  
</ItemGroup>

мой полный код: https://pastebin.com/ck1gCtd8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...