【发布时间】:2019-08-02 05:58:35
【问题描述】:
我正在努力理解这句话:
默认情况下,对于必需的关系,配置了级联删除行为,并且将从数据库中删除子/依赖实体。
在此 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; }
}
当我通过 id 检索博客时
[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
}
]
}
当我将更新后的以下 JSON 发送回 API 以保留在数据库中时
{
"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();
}
一切正常,但没有修改任何条目。
由于帖子与博客之间的关系是必需的,并且相关帖子已从博客 collection-of-posts 属性中删除,不应将 PostId = 1 的帖子从数据库中删除吗?
真正让我困惑的是,只要我在博客和帖子之间使用多对多关系,而不更改逻辑中的任何其他内容,表 Blog_Post 中 PostId = 1 的条目实际上就被删除了。
【问题讨论】:
-
这个问题有可能是它的根本原因吗? See GitHub issue Here 修复已合并到 release/2.2 分支,我正在使用 EFCore 2.2.0
标签: c# entity-framework asp.net-core entity-framework-core