Я пытаюсь понять это предложение:
По умолчанию для обязательных отношений настроено каскадное удаление, и дочерняя / зависимая сущность будет удалена из базы данных.
найдено в параграфе «Удаление связей» в документации Microsoft по EF Core: https://docs.microsoft.com/en-us/ef/core/saving/related-data#removing-relationships
В .Net Core API с моделью блога и сообщениями следующим образом
public class Blog
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int BlogId { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PostId { get; set; }
public int BlogId { get; set; }
public virtual Blog Blog { get; set; }
}
Когда я получаю блог по идентификатору через
[HttpGet("{id}")]
public async Task<IActionResult> GetBlog([FromRoute] int id)
{
return await context.Blog.Where(b => b.BlogId == id)
.Include(b => b.Posts).FirstOrDefaultAsync();
}
получаю в JSON
{
"BlogId": 1,
"Posts": [
{
"PostId": 1
},
{
"PostId": 2
}
]
}
Когда я отправляю обратно в API обновленный следующий JSON для сохранения в базе данных
{
"BlogId": 1,
"Posts": [
{
"PostId": 2
}
]
}
до
[HttpPut("{id}")]
public async Task<IActionResult> PutBlog([FromRoute] int id, [FromBody] Blog blog)
{
this.context.Update(blog);
await this.context.SaveChangesAsync();
return this.Ok();
}
Все работает нормально, но записи не изменяются.
Поскольку требуется связь между публикацией и блогом, а соответствующая запись удаляется из свойства коллекции записей в блоге, не следует удалять из базы данных сообщение с PostId = 1?
Что меня действительно смущает, так это то, что, как только я использую отношения «многие ко многим» между блогами и публикациями, не меняя ничего в логике, запись в таблице Blog_Post, где PostId = 1 фактически удаляется.