[entity framework core] Referential Constraint Action Options

link: https://www.learnentityframeworkcore.com/relationships/referential-constraint-action-options

我的理解是, 当你对数据库中的某个数据进行更新或者删除操作时, 对这个数据关联的数据如何操作的设置.

为了能够更好的理解, 首先搞两个表:

根据图示, author 表中的 author id 是作为 books 表中的外键存在的. 在设置 books 表的外键时的sql 语句为:

CONSTRAINT [FK_Books_Authors_AuthorId] FOREIGN KEY ([AuthorId]) REFERENCES [Authors] ([AuthorId])

也就是说当设置外键时, 我们需要指定一下, 当 Author 表中的 record 被 update 或者 delete 时, books 表中相关联的数据的值如何进行联动的设置.

ef core 提供了四个设置, 分别是以下:

  • on update/delete no action

这个设置是默认的, 举个例子就是当你删除 author 表中的某个 author 记录时, 如果你不先将 books 表中外键为该 author 的数据先删除, 你就不能去删除 author 表里这条记录.

  • on update/delete restrict

这个设置是需要开发者手动指定, 但是其作用和 no action 类似, 两者的区别在于外键约束的检查顺序不同. restrict 会先检查你要删除的 author 的 record 是否在 books 表中有关联的数据, 如果有, 就不删除 author. 但是 no action 是先删除 author 的 record, 然后拿着 author id 去 books 表中查是否有关联的数据, 如果有, 就需要回滚刚才删除的操作. 这是两者的区别.

  • on update/delelte set null

这个比较简单, 就是你删除 author 时, 相关的 book 记录的 author 列会被赋值为 null, 前提是 author 这一列必须是 nullable.

  • on update/delete set default value

这个设置和 set null 差不多, books 表中的 author 列需要被设置了 default value, 如果没设置, 需要是 nullable 的, 此时 default value 为 null.

posted @ 2019-10-10 16:02  YanyuWu  阅读(206)  评论(0编辑  收藏  举报