2015-03-02 42 views
1

編譯時,我得到實體命令執行異常。相同的代碼行在其他地方工作正常,但我需要它返回這個異常。實體命令執行異常

//Working fine here! 
Questionnaire questionnaireeeee = context.Set<Questionnaire>().Include(q => q.QuestionnaireQuestions.Single(q => q.ID == 1); 
//need to see who is logged in, administrator or professor 
string userId = User.Identity.GetUserId(); 
//... 
if(User.IsInRole("Administrator")) 
{ 
    //grouping subject instances by same semester 
    var subjectInstancesBySemester = from subjectInstances in context.SubjectInstances group subjectInstances by subjectInstances.Semester; 
    foreach (var subjectInstancesGroup in subjectInstancesBySemester) 
    { 
     // getting questionnaire related to this semester 
     if(subjectInstancesGroup.Key.QuestionnaireID != null) 
     { 
     //Exception is here! 
      Questionnaire questionnaire = context.Set<Questionnaire>().Include(q => q.QuestionnaireQuestions).Single(q => q.ID == (int) subjectInstancesGroup.Key.QuestionnaireID); 
      //... 
     } 
    } 
} 

和我一起斷點檢查,subjectInstancesGroup.Key.QuestionnaireID的值爲1,且有排表與問卷調查1.問題出在哪裏ID?

回答

2

實體框架可能無法編譯您給他的表達式樹。

是否添加.ToArray()解決問題?

var subjectInstancesBySemester = 
     from subjectInstances in context.SubjectInstances 
     group subjectInstances by subjectInstances.Semester; 

foreach (var subjectInstancesGroup in subjectInstancesBySemester.ToArray()) 
{ 
    // getting questionnaire related to this semester 
    if(subjectInstancesGroup.Key.QuestionnaireID != null) 
    { 
     var questionnaireId = (int) subjectInstancesGroup.Key.QuestionnaireID; 
     Questionnaire questionnaire = context.Set<Questionnaire>().Include(q => 
        q.QuestionnaireQuestions).Single(q => q.ID == questionnaireId); 
     //... 
    } 
} 

通過添加.ToArray()對數據庫執行查詢。實體框架現在不需要在更復雜的查詢中進行編譯。無論如何你在整個returnset上迭代,我不認爲這會是一個問題。