2010-11-11 71 views
0

我試圖從我的DomainService類中將IQueryable拉到使用RIA服務的XAML代碼後面。實體框架外表無法在xaml代碼中訪問

DomainService從BLL中抽取,BLL從DAL中抽取,從DAL中獲取它。

我似乎無法訪問XAML中的外部表,但我可以在DomainService方法中很好地訪問它。

該方法的DomainService看起來像這樣...

public IQueryable<MenuHeader> GetMenuHeaders() 
    { 
     BusinessLogic.Employee blEmployee = new BusinessLogic.Employee(); 

     int employeeId = blEmployee.GetEmployeeIdFromUserName(HttpContext.Current.User.Identity.Name); 
     var menuHeaders = blEmployee.GetEmployeeMenuHeaders(employeeId); 
     // This works here! 
     var menuHeaderItems = from mh in menuHeaders 
           select mh.MenuHeaderItems; 
     return menuHeaders; 
    } 

在XAML代碼後,我把這種方法在這裏:

...

EmployeeContext employeeContext = new EmployeeContext(); 

EntitySet<MenuHeader> menuHeaders = employeeContext.MenuHeaders;    
employeeContext.Load(employeeContext.GetMenuHeadersQuery()).Completed += (s, e) => 
    { 
     // This does NOT work here! 
     var menuHeaderItems = from mh in menuHeaders 
           select mh.MenuHeaderItems; // <-- Not found 
    }; 

...

我怎樣才能得到這張表到我的XAML代碼,以便我可以綁定它?

回答

0

這裏的問題是我的實體模型不是我的ASP.Net/RIA應用程序的一部分。僅供參考。

由於它是參考,因此DomainService不會自動生成元數據。我不得不手動創建元數據,以便Silverlight知道期望的結果。

0

您的發送和接收代碼顯示完全正確。如果服務器端正確地返回測試代碼中的實體,那麼出現了一些錯誤。我已經嘗試了幾種變化,並且無法獲得類似的代碼,從而失敗有史以來

順便說一句,你有訪問來自RIA服務返回的集合3個選項:

1.使用特定集合中的上下文(像你一樣)

EntitySet<MenuHeader> menuHeaders = employeeContext.MenuHeaders; 
... // On Completed event 
var menuHeaderItems = from mh in menuHeaders 
          select mh.MenuHeaderItems; 

2.使用加載操作實體屬性

EmployeeContext employeeContext = new EmployeeContext(); 
var LoadOp = employeeContext.Load(employeeContext.GetMenuHeadersQuery()); 
// Bind to LoadOp.Entities 

3.使用load()回調參數

EmployeeContext employeeContext = new EmployeeContext(); 
var LoadOp = employeeContext.Load(employeeContext.GetMenuHeadersQuery(), 
     (cb) => 
     { 
      // do something with cb.Entities here 
     }, 
     false); 

我更喜歡第2版延遲綁定和3的任何自定義響應(只是爲了保持代碼的行數下降)。