聯(lián)合主鍵,及視圖子表null值問題

子表為空,但子表的FID不為null,導致根據(jù)主表字段查出來的值也為null
解決方法:添加聯(lián)合主鍵 (在view視圖類型中經(jīng)常用到) 和 將子表主鍵默認設置為-1
將下面代碼

public ProjectDetailViewMap()
 {
      this.ToTable("Sys_ProjectDetailView");
      this.HasKey(t => t.F_Id );
}

改為:

public ProjectDetailViewMap()
{
       this.ToTable("Sys_ProjectDetailView");
       this.HasKey(t => new { t.F_Id,t.project_id});
}

在sql中添加的視圖,如果子表的FID不允許為null時,創(chuàng)建視圖根據(jù)主表左連會導致子表的FID為null,違背了子表的建表邏輯.
當進行查詢時,查出來的子表為空時則ProjectDetailViewEntity記錄為null

public List<ProjectDetailViewEntity> SearchSumByYear(int year)
{
      return detailviewService.IQueryable().Where(p => p.F_ProjectYear == year).ToList();
}

在sql中修改創(chuàng)建的視圖view,將子表主鍵默認設置為-1,再次查詢,即可查詢出子表記錄

SELECT  pe.F_Id AS project_id, pe.F_ProjectYear, pe.F_ProjectTitle, si.F_FullName, si.F_ParentId, CASE WHEN pd.F_Id IS NULL 
                   THEN '-1' ELSE pd.F_Id END  F_Id, pd.F_ProjectFID, pd.F_ItemFID, pd.F_ContractName, pd.F_ProjectTime, 
                   pd.F_DocumentNumber, pd.F_ProjectFee, pd.F_FileFID, pd.F_SortCode, pd.F_DeleteMark, pd.F_EnabledMark, 
                   pd.F_Description, pd.F_CreatorTime, pd.F_CreatorUserId, pd.F_LastModifyTime, pd.F_LastModifyUserId, pd.F_DeleteTime, 
                   pd.F_DeleteUserId
FROM      dbo.Sys_Project AS pe LEFT OUTER JOIN
                   dbo.Sys_ProjectDetail AS pd ON pe.F_Id = pd.F_ProjectFID LEFT OUTER JOIN
                   dbo.Sys_Items AS si ON si.F_Id = pd.F_ItemFID AND si.F_EnCode = 'projectroot'
WHERE   (pe.F_IsDelete = 0)

關鍵點 : CASE WHEN pd.F_Id IS NULL THEN '-1' ELSE pd.F_Id END F_Id
復習點: Case具有兩種格式。簡單Case函數(shù)和Case搜索函數(shù)。

  • 簡單Case函數(shù)CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END
  • Case搜索函數(shù)CASE WHEN sex = '1' THEN '男' WHEN sex = '2' THEN '女' ELSE '其他' END

這兩種方式,可以實現(xiàn)相同的功能。簡單Case函數(shù)的寫法相對比較簡潔,但是和Case搜索函數(shù)相比,功能方面會有些限制,比如寫判斷式。還有一個需要注意的問題,Case函數(shù)只返回第一個符合條件的值,剩下的Case部分將會被自動忽略。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容