FreeSql icon indicating copy to clipboard operation
FreeSql copied to clipboard

为code first模式加入外键约束

Open truemogician opened this issue 3 years ago • 4 comments

通过导航属性实现级联操作是个好办法,但缺乏数据库自身的外键约束会埋下隐患,比如当插入数据的外键数据不存在于关联表中时,有外键约束的话数据库会报错,但没有就会被视为合法数据;此外缺乏外键导致数据库完全依赖FreeSql框架,如果出于某些原因需要换用其他ORM或者写一些SQL,会带来极大的麻烦。
导航属性的逻辑和外键非常相似,更何况db first模式已经支持了外键到导航属性的迁移,所以何不把code first的导航属性也同步写入数据库的外键约束呢?

truemogician avatar Aug 28 '21 18:08 truemogician

在空表、空数据的时候,外键管理很容易。

在已经有表数据的情况下,外键的重建管理成本相当麻烦。没有外键的情况下可能只需要处理1个表结构+数据,返之可能需要同时处理1-10个表结构+数据,更容易丢失数据。

2881099 avatar Aug 29 '21 01:08 2881099

但code first不就是空表空数据么?你是在考虑如果加了外键,已经用code first做出来的项目升级到新版的问题么?

truemogician avatar Aug 29 '21 02:08 truemogician

但code first不就是空表空数据么?你是在考虑如果加了外键,已经用code first做出来的项目升级到新版的问题么?

是的

2881099 avatar Aug 30 '21 09:08 2881099

或许可以考虑把CodeFirst外键做成一个单独的Package?这样已有项目升级也不会受到影响了

truemogician avatar Sep 13 '21 06:09 truemogician