2013-05-17 98 views
0

执行常规的SQL查询我试图通过执行长的SQL查询:显示在下方为您提供方便无法通过实体框架

IEnumerable<erequest> blah = db.Database.SqlQuery<erequest>().ToList(); 

查询。当我exectute查询,我发现了以下错误:

The data reader is incompatible with the specified ' enrollDBModel.erequest '. A member of the type, ' er_student_id ', does not have a corresponding column in the data reader with the same name.

然而,er_student_id meber并在erequest.cs Context.tt类

public int er_student_id { get; set; } 

存在(也看帖子的底部完整的类)

查询:

SELECT erequests.er_id, 
     CASE 
     WHEN current_subject_enrollment.count >= subjects.sj_max_enrollment 
     THEN 0 
     WHEN already_passed.count >= 1 THEN 0 
     WHEN is_already_enrolled.count >= 1 THEN 0 
     WHEN failure_times.count >= 3 THEN 0 
     WHEN current_student_enrollment.count >= 4 THEN 0 
     ELSE 1 
     END AS can_enroll, 
     students.st_first_name, 
     students.st_mid_name, 
     students.st_last_name, 
     students.st_student_id, 
     subjects.sj_subject_name, 
     subjects.sj_availability, 
     subjects.sj_max_enrollment, 
     erequests.er_subject_id, 
     erequests.er_reason, 
     erequests.er_status 
FROM erequests 
     RIGHT JOIN students 
       ON erequests.er_student_id = students.st_student_id 
     RIGHT JOIN subjects 
       ON erequests.er_subject_id = subjects.sj_subject_id 
        AND subjects.sj_availability = 1 
     LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
           em_subject_id 
         FROM enrollment 
         WHERE (em_enrolled = 1) 
         GROUP BY em_subject_id) AS current_subject_enrollment 
        ON erequests.er_subject_id = 
         current_subject_enrollment.em_subject_id 
     LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
           em_student_id, 
           em_subject_id 
         FROM enrollment 
         WHERE (em_enrolled = 1) 
         GROUP BY em_student_id, 
            em_subject_id) AS is_already_enrolled 
        ON erequests.er_student_id = 
         is_already_enrolled.em_student_id 
         AND erequests.er_subject_id = 
          is_already_enrolled.em_subject_id 
     LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
           em_student_id, 
           em_subject_id 
         FROM enrollment 
         WHERE (em_enrolled = 0 
           AND em_result >= 50) 
         GROUP BY em_student_id, 
            em_subject_id) AS already_passed 
        ON erequests.er_subject_id = already_passed.em_subject_id 
         AND erequests.er_subject_id = 
          already_passed.em_subject_id 
     LEFT OUTER JOIN (SELECT Count(em_student_id) AS count, 
           em_student_id, 
           em_subject_id 
         FROM enrollment 
         WHERE (em_enrolled = 0 
           AND em_result < 50) 
         GROUP BY em_student_id, 
            em_subject_id) AS failure_times 
        ON erequests.er_subject_id = failure_times.em_subject_id 
         AND erequests.er_subject_id = failure_times.em_subject_id 
     LEFT OUTER JOIN (SELECT Count(em_subject_id) AS count, 
           em_student_id 
         FROM enrollment 
         WHERE (em_enrolled = 1) 
         GROUP BY em_student_id) AS current_student_enrollment 
        ON erequests.er_student_id = 
         current_student_enrollment.em_student_id 
WHERE (subjects.sj_availability = 1) 
     AND (erequests.er_status NOT IN ('A', 'D')) 

erequest.cs:

public partial class erequest 
{ 
    public int er_id { get; set; } 

    public int can_enroll { get; set; } 

    [Required] 
    [Range(1, 100000)] 
    [Display(Name = "Subject Id: ")] 
    public int er_subject_id { get; set; } 

    [Required] 
    [Range(1, 100000)] 
    [Display(Name = "Student Id: ")] 
    public int er_student_id { get; set; } 

    [Required] 
    [Display(Name = "Reason: ")] 
    public string er_reason { get; set; } 

    [Required] 
    [Display(Name = "Status: ")] 
    public string er_status { get; set; } 

    public virtual student student { get; set; } 
    public virtual subject subject { get; set; } 

    public IEnumerable<erequest> processedErequests { get; set; } 

    public IEnumerable<erequest> unprocessedErequests { get; set; } 
} 

回答

0

你在错误地解释错误。它说:

A member of the type, 'er_student_id', does not have a corresponding column in the data reader 

它告诉你,它无法找到该属性的datareader中的值。你需要确保你的数据读取器有一个名称列(例如,改变你的查询)

+0

耶哈哈哈我刚刚意识到,也只是关于删除问题哈哈。 – bicycle

+0

5分钟后系统允许我接受 – bicycle