先分析外鍵和導航屬性的幾種定義情況:
情況 | 外鍵類型 | 導航屬性 | 生成結果 | 備註 |
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。
結果:定義外鍵屬性類型時,要弄清是否存在可爲空的情況,否則將影響數據的正常查詢!
有錯誤之處請留言指正,謝謝!!