2016-09-25 50 views
0

下面是該查詢:EF6異步包含的實體屬性爲空?

using (var _context = GetCommonDataContext()) 
    { 
     return await _context.AnswerSelectListEntries 
      .Include(asle => asle.Optional) 
      .OrderBy(asle => asle.DisplayOrder) 
      .Select(asle => new AnswerSelectListEntryDTO() 
      { 
       Id = asle.Id, 
       AnswerSelectListId = asle.AnswerSelectListId, 
       ShortAnswer = asle.ShortAnswer, 
       LongAnswer = asle.LongAnswer, 
       CounterpartyGroupId = asle.CounterpartyGroupId, 
       Optional = new AnswerDefDTO() 
       { 
        Id = asle.Optional.Id, 
        Name = asle.Optional.Name, 
        AnswerType = asle.Optional.AnswerType, 
        MultiplierAnswerType = asle.Optional.MultiplierAnswerType, 
        IntRangeLow = asle.Optional.IntRangeLow, 
        IntRangeHigh = asle.Optional.IntRangeHigh, 
        AnswerSelectListId = asle.Optional.AnswerSelectListId 
       }, 
       AnswerDefId = asle.AnswerDefId, 
       PartyType = asle.PartyType, 
       DisplayOrder = asle.DisplayOrder 
      }).ToListAsync(); 
    } 

我得到一個錯誤(從子查詢拋出),其標識,以及AnswerType(這是一個枚舉),不能強制他們同行(int和枚舉),因爲它們是空值。問題是它們是不可空的(並且在數據庫中不爲空)。不知何故,asle.Optional的屬性被設置爲null(儘管它們是不可空的)。我猜這與異步有關,但不知道是什麼。

使用固定:

Optional = asle.Optional == null ? null : new AnswerDefDTO()... 
+0

您認爲它與異步有什麼關係?這是一個查詢 - 在運行時它會被翻譯成什麼樣的SQL查詢?是否需要'AnswerSelectListEntries'具有'Optional'?什麼是確切的例外? – peter

+0

@peter我不知道它與可選項有關。我只是猜測。 AnswerSelectListEntry.optional不是必需的,它有時是空的。期望是當填充AnswerSelectListEntry.optional時,AnswerSelectListEntryDTO.Optional也將被填充。 – pQuestions123

+0

是的,所以我到目前爲止還沒有EF6的專家知道什麼時候會拋出什麼異常,但是我認爲你正在對待'asle.Optional',好像它永遠不會爲空。 **可能會成爲錯誤的根源。但是,因爲我永遠不會做這樣的事情,我從來沒有處理過這個問題「當我訪問一個實際爲空的包含表的屬性時會發生什麼?」 - 您解釋異常的方式也可能有偏差,這就是原始異常可能有所幫助的原因。 – peter

回答

1

我的猜測是,因爲那個東西是可選的,正在某種加盟,最有可能是左連接到數據庫中,該列趕回來, DBNull僅僅是因爲它們實際上並不在數據庫中。我會建議你運行一個SELECT * FROM可選的ID =無論asle.Id是。

+0

EF查詢中沒有asle.id where子句。我只是直接對數據庫運行SQL查詢(連接兩個表),它工作得很好。 – pQuestions123

+0

那麼每個AnswerSelectListEntries在連接表中都有一個對應的Optional?如果沒有,並且你正在做一個外部聯接而不是內部聯接,這看起來就像是LINQ查詢所做的那樣,在某些情況下你會看到你所看到的行爲。這似乎特別可能,因爲它的名字暗示它實際上是可選的。 – jamesbascle

+0

是的,你是對的。我需要考慮可選的== null。這解決了它。 – pQuestions123

相關問題