EF Core学习笔记:额外的外键属性 / 单项导航属性

85 篇文章 0 订阅
35 篇文章 0 订阅

虽然一直在做定制化开发,但是不能总是食嗟来之食。很多东西还是自己必须要掌握的。

额外的外键属性 

为什么需要外键属性

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()

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董厂长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值