2010-11-11 102 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的任何自定义响应(只是为了保持代码的行数下降)。