代码之家  ›  专栏  ›  技术社区  ›  Felipe Pessoto

引入外键约束可能导致循环或多个级联路径?

  •  1
  • Felipe Pessoto  · 技术社区  · 15 年前

    当我首先从实体框架代码生成数据库时,会得到这个错误。

    我没看到脚本有任何问题:

    alter table [dbo].[Votes] add constraint [Post_Votes] foreign key ([Post_Id]) references [dbo].[Posts]([Id]) on delete cascade;
    
    alter table [dbo].[Votes] add constraint [User_Votes] foreign key ([Voter_Id]) references [dbo].[Users]([Id]) on delete cascade;
    

    每个引用都指向不同的表!

    每个表只能删除一个级联?

    Edit: I think I found the problem, the bug is EF:
    

    如果我有三张表:用户、帖子和投票。

    关系:

    post.authorid->用户.id votes.post id->发布.id votes.user id->用户.id

    SQL正确生成错误,因为如果删除日志,我将有两个投票路径:用户->投票和用户->发布->投票

    但是实体框架没有检测到这一点并生成3个带有on-delete级联的外键。

    1 回复  |  直到 15 年前
        1
  •  3
  •   onedaywhen    15 年前

    编辑:我想我发现了问题,这个bug是ef

    我认为你是对的。 This ADO.NET team blog post 似乎解决了注释中的问题,即在后配置类中设置cascadeondelete=false。