1

我下面就Silverlight和棱鏡,其中WCF RIA服務是使用通過ADO.NET實體數據模型訪問Northwind數據庫一個tutorial爲外鍵返回null。WCF RIA EntityQuery

在Northwind數據庫中,有哪些是通過外鍵連接到其他兩個表(訂單和產品)的表ORDER_DETAILS:

Picture of Data Model

查詢數據庫的代碼如下所示:

EntityQuery<Order_Detail> detailQuery = _MyDomainContext.GetOrder_DetailsQuery(); 

_MyDomainContext.Load(detailQuery.Where(
      det => det.Order.Customer.CustomerID == cust.CustomerID).OrderByDescending(
      det => det.Order.OrderDate).Take(10), OnDetailsLoaded, null); 

,然後在OnDetailsLoaded:

var details = loadOp.Entities; 
if (details != null) 
     { 
      var detailsList = details.ToList(); 
      detailsList.ForEach(det => Orders.Add(
       new OrderItem 
       { 
        ProductName = det.Product.ProductName, 
        Quantity = det.Quantity, 
        OrderDate = det.Order.OrderDate.Value 
       })); 

這給我一個空例外new OrderItem,因爲產品和訂單都爲空。我已經將我的EntityDataModel設置爲「在模型中包含外鍵列」。代碼與教程完全相同,我只需重新創建ADO.Net EntityDataModel和DomainService以與我的本地數據庫一起工作,所以錯誤可能在某處。

我該如何調試這個錯誤?我以前沒有使用數據庫的經驗。我正在使用2012版Northwind數據庫的SQL Server 2012,而本教程是用SQL Server 2008 RC編寫的。

+0

您可能可以使用Fiddler2來查看http請求和響應。 – 2012-07-29 19:47:04

回答

1

以下是我必須要解決的問題。 Josh的回答是解決方案的一部分,但我也不得不添加[包含]屬性的元數據:

在MyDomainService.cs,添加.Include()

public IQueryable<Order_Detail> GetOrder_Details() 
    { 
     return this.ObjectContext.Order_Details.Include("Order").Include("Product"); 
    } 

在MyDomainService.metadata.cs,添加[Include]

internal sealed class Order_DetailMetadata 
    { 

     // Metadata classes are not meant to be instantiated. 
     private Order_DetailMetadata() 
     { 
     } 


     [Include] 
     public Order Order { get; set; }   

     [Include] 
     public Product Product { get; set; } 


    } 
} 

對此進行了詳細的this website指出來向我描述,感謝Brian Noyes

1

您可能需要明確將產品/訂單包含在裝入方法中。嘗試做一個

.Include("Order").Include("Product") 

在域上下文加載。

+0

我試過了,但沒有什麼區別。 'public IQueryable GetOrder_Details() { return this.ObjectContext.Order_Details.Include(「Order」)。Include(「Product」); } ' – Phasma 2012-07-26 16:12:36