先分析外键和导航属性的几种定义情况:
情况 | 外键类型 | 导航属性 | 生成结果 | 备注 |
1 | int | 有 | inner | linq和lamda 只能生成inner join |
2 | int | 无 | inner,left | |
3 | int? | 有 | linq:left,inner include:left | linq:当使用左连接方法生成left,默认生成inner include:只能生成left |
4 | int? | 无 | inner,left | 因为没有导航属性,所以只能用lamda |
5 | string | 有 | linq:inner,left include:left | 字符主外键时不建议使用DefaultIfEmpty,会多生成一部分 |
6 | string | 无 | inner,left |
综上分析:
1、int型主外键时,外键不为空表有导航属性,只能生成inner连接,其他情况可以生成inner 、left 和right连接;
2、string型主外键时,可以生成inner,left。
结果:定义外键属性类型时,要弄清是否存在可为空的情况,否则将影响数据的正常查询!
有错误之处请留言指正,谢谢!!