2016-11-05 75 views
0

支持我有這個疑問:實體框架:無法創建類型爲**的常量值。只有原始類型或枚舉類型在此背景下

 public override IEnumerable<Order> ExecuteQuery(MovieRentalContext database) 
    { 

     return from order in database.Orders 
      where (customer == null || customer.Id == order.CustomerId) 
      select order; 
    } 

如果客戶是在類領域。 還有訂單類

public class Order: Entity 
{ 
    [Required] 
    public Copy Copy { get; set; } 

    public Customer Customer { get; set; } 
    public DateTime OrderDate { get; set; } 
    public DateTime EstimatedReturnDate { get; set; } 
    public Salesman Salesman { get; set; } 

    public DateTime? ActualReturnDate { get; set; } 
    public decimal Price { get; set; } 

    [ForeignKey("Customer")] 
    public long CustomerId { get; set; } 
} 

實體包含Id。我想獲得客戶的訂單,但在執行期間查詢拋出異常:

無法創建>'MovieRental.DataAccess.Models.Customer'類型的常量值。在此上下文中僅支持基本類型或枚舉>類型。

我試過了我發現的所有東西,但是stil不起作用。問題是什麼?

+0

設置InnerException說什麼?去討論例外的細節。 – CodeNotFound

+0

你的客戶變量是什麼?它在哪裏定義? –

回答

0

我想說你的customer == null代碼是造成這種情況。 EF試圖將其轉換爲SQL,但客戶不在此範圍內。嘗試並在查詢之外採取該條件。

public override IEnumerable<Order> ExecuteQuery(MovieRentalContext database) 
{ 
    if (customer != null) 
    { 
     return from order in database.Orders 
      where order.CustomerId == customer.Id 
      select order; 
    } 
    else 
    { 
     return from order in database.Orders 
      select order; 
    } 

} 
+0

這個問題的目的不在於解決NullReferenceException – CodeNotFound

+0

@CodeNotFound - 我想不是。不確定我自己,所以我不會發布答案,但通過類似的問題,似乎這個答案是正確的(再次,就像我的知識) –

+0

@Mladen Mihajlovic - 你可以通過將'else'的查詢分配給變量,然後有一個'if'語句來檢查客戶。在'if'的範圍內添加'where'並最終返回 –

相關問題