虽然一直在做定制化开发,但是不能总是食嗟来之食。很多东西还是自己必须要掌握的。
额外的外键属性
为什么需要外键属性
1、EF Core会在数据表中建外键列。
2、如果需要获取外键列的值,就需要做关联查询,效率低。(各种join)
3、需要一种不需要Join直接获取外键列的值的方式。
设置外键属性
1、在实体类中显式声明一个外键属性。
2、关系配置中通过HasForeignKey(c=>c.ArticleId)指定这个属性为外键。
3、除非必要,否则不用声明,因为会引入重复。
然后记得去配置!不然EFcore不知道这个外键是哪里来的。
复习一下 hasOne( )
单项导航属性
双向导航属性的麻烦:很多的表都会引用同一张表,如此,user表会建立很多反向的导航属性。
没必要
所以我们需要单项导航属性。
要求者 和 批准者 都指向user表
配置方法
不设置反向的属性,然后配置的时候WithMany()不设置参数即可。
单向属性如何反向获取数据
//再查询一下即可:
ctx.Leaves.Where(l => l.Requester == u)
对于主从结构的“一对多”表关系,一般是声明双向导航属性。
而对于其他的“一对多”表关系:如果表属于被很多表引用的基础表,则用单项导航属性,否则可以自由决定是否用双向导航属性。
考虑到有单项导航属性的可能,我们一般用HasOne().WithMany()