实体框架外表不能在xaml代码后面访问

时间:2010-11-11 21:14:08

标签: silverlight entity-framework ria domainservices

我试图使用RIA服务从我的DomainService类中提取IQueryable到我的XAML代码。

DomainService来自BLL,它来自DAL,后者从EF获取。

我似乎无法访问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代码中,以便我可以对其进行数据绑定?

2 个答案:

答案 0 :(得分:0)

您的发送和接收代码看起来非常正确。如果服务器端正确地返回测试代码中的实体,那么事情就变得非常糟糕了。我已经尝试了几种变体,无法获得类似的代码来永远

除此之外,您还有3个选项可以访问从RIA服务返回的集合:

<强> 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更喜欢任何自定义响应(仅用于保持代码行)。

答案 1 :(得分:0)

这里的问题是我的实体模型不是我的ASP.Net/RIA应用程序的一部分。它仅在。中引用。

由于它是一个引用,DomainService不会自动生成元数据。我不得不手动创建元数据,以便Silverlight知道会发生什么。