C# EF Core中存在单边一对一关系和级联删除问题

C# EF Core中存在单边一对一关系和级联删除问题,c#,entity-framework,asp.net-core,entity-framework-core,C#,Entity Framework,Asp.net Core,Entity Framework Core,我的总体数据结构是: Story |— VotesPool | \— Votes[] |— ShelfStoriers[] |— StoryTags[] \— Chapters[] \— CommentsThread \— Comments[] 删除是通过简单的\u context.Stories.Remove(Story)完成的,没有什么特别之处 当一个故事被删除时,章节s也会被删除,故事标签s和搁置库s也会被删除,但除了此结构之外,没有其他内容,包括章节的从属内容。数据

我的总体数据结构是:

Story
|— VotesPool
|  \— Votes[]
|— ShelfStoriers[]
|— StoryTags[]
\— Chapters[]
   \— CommentsThread
      \— Comments[]
删除是通过简单的
\u context.Stories.Remove(Story)
完成的,没有什么特别之处

当一个
故事
被删除时,
章节
s也会被删除,
故事标签
s和
搁置库
s也会被删除,但除了此结构之外,没有其他内容,包括
章节
的从属内容。数据库中充满了孤儿

这两个遗留问题(
Story.VotesPool
Chapter.CommentsThread
)的共同点是,它们都是一对一的关系,引用只保留在父对象上,例如

课堂故事{
公共int Id{get;set;}
公共VotesPool投票{get;set;}
}
课堂评论{
公共int Id{get;set;}
公共VotesPool投票{get;set;}
}
类VotesPool{
公共int Id{get;set;}
公共IEnumerable投票{get;set;}
}
而不是我认为正确的设置方式:

课堂故事{
公共int Id{get;set;}
公共VotesPool投票{get;set;}
}
课堂评论{
公共int Id{get;set;}
公共VotesPool投票{get;set;}
}
类VotesPool{
公共int Id{get;set;}
公共IEnumerable投票{get;set;}
公共故事?故事{get;set;}
公共注释?注释{get;set}
}
但这个解决方案并不适合我,原因有两个:

  • VotesPool
    CommentsThread
    都是一种暂时的连接表,它们不是直接相关的。因此,提及父母似乎有点毫无意义

  • 使用此解决方案将需要在每次我决定将它们附加到某个新模型时更新
    VotesPool
    CommentsThread
    模型。如果我想将
    CommentsThread
    添加到
    Story
    ,我还必须将
    Story
    添加到
    CommentsThread

  • 我的DbContext配置,其中所有删除行为(假定)都已设置。代码的其余部分也在回购协议中。我正在使用EF核心和PostgreSQL

    我的数据建模方式,即片面关系是问题的关键吗?是应该通过双边关系来解决问题,还是有一些注释/流畅的方法来处理问题而不改变模型本身