2017-09-25 73 views
0

我在下面執行了原始SQL查詢以僅選擇表中的某些字段。'System.Data.Entity.Core.EntityCommandExecutionException'發生在EntityFramework.SqlServer.dll中,但未在用戶代碼中處理

{ 
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>(); 
var cid = db.Customers.SqlQuery("select SchedDate from Customer where CustID = '@id'").ToList<Customer>(); 
} 

但我不斷收到的錯誤: System.Data.Entity.Core.EntityCommandExecutionException發生在EntityFramework.SqlServer.dll但在用戶代碼中沒有處理

其他信息:數據讀取器與指定的不兼容ALFHomeMovers.Customer。該類型的成員CustID在數據讀取器中沒有相應的列,名稱相同。

+0

有沒有在數據庫中的'CustID'列? –

+0

是的,有@OJ Raqueno – ninuhh

+0

當我檢查該錯誤的InnerException時,它說它是空的。我嘗試應用我在同一個問題中看到的答案,但它不起作用。 – ninuhh

回答

0

異常消息是非常簡單的:查詢有望重返Customer表的全部的實體,但只有SchedDate列返回,因此EF不能做其他映射省略列,包括CustID

假設CustomersDbSet<Customer>,嘗試從Customer,而不是返回所有領域:

// don't forget to include SqlParameter 
var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id", 
           new SqlParameter("id", "[customer_id]")).ToList(); 

如果你只想返回SchedDate列,物化查詢結果,並使用Select算賬:

var cid = db.Customers.SqlQuery("SELECT * FROM Customer WHERE CustID = @id", 
           new SqlParameter("id", "[customer_id]")) 
         .AsEnumerable().Select(x => x.SchedDate).ToList(); 

NB:我認爲你可以從上面的SELECT查詢構建LINQ:

var cid = (from c in db.Customers 
      where c.CustID == "[customer_id]" 
      select c.SchedDate).ToList(); 

類似的問題:

The data reader is incompatible with the specified Entity Framework

0

使用下面的查詢,而不是原始查詢:

{ 
List<CustEmpVM> CustomerVMlist = new List<CustEmpVM>(); 
var cid = db.Customers.Where(w=>w.Id == YOURCUSTOMERID).Select(s=>new Customer{SchedDate = s.SchedDate }).ToList(); 
} 

它會給編譯時錯誤,而不是運行時錯誤。

+0

仍然無法正常工作 – ninuhh

相關問題