Я использую. 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