Asp.net core 学习笔记 ef core Surrogate Key, Natural Key, Alternate Keys

我怕爱的太早我们不能终老 提交于 2019-11-28 12:55:33

Surrogate Key vs Natural Key, 争论多年 

https://www.mssqltips.com/sqlservertip/5431/surrogate-key-vs-natural-key-differences-and-when-to-use-in-sql-server/

2 个都有好处坏处. 

ef core 对 Natural Key 支持比较弱. 

使用 Alternate Keys 来实现

https://docs.microsoft.com/en-us/ef/core/modeling/alternate-keys

它最糟糕的地方是,目前不支持修改 

https://stackoverflow.com/questions/36200436/cannot-update-alternate-key-entity-framework-core-1-0

https://github.com/aspnet/EntityFrameworkCore/issues/4073

 

对我来说大部分情况下 Surrogate Key 是好用的

但它凡事都要 join 表比较麻烦, filter 也好,查询值也好,都一定要 join.

所以我认为 Natural Key 在满足 2 个点时候会更好用

1. join 的 table 只是一个 primary column

2. column 值不会被改变. (这个是因为目前 ef core 不支持修改)

比如有个 category 和 product 

category 只有一个 name, 如果做一个 category 表那每次 product 就得 join category 为了拿唯一的 category name。

而如果 product 直接记入 category name 就方便多了. 

 

短期内 ef 应该是不会支持 update 这个功能的,数据库方便我们可以通过 onupdate cascade 来实现, 但是 ef  fluent api 目前也无法设置这个, 我们写语句也没有用,ef savechanges 时也是会报错.

所以, 要嘛做 edit 的时候,不走 ef 自己 call sql 语句, 或者通过 insert new category -> update product category to new category -> delete old category 这种方式来实现.

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!