我试图使用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代码中,以便我可以对其进行数据绑定?
答案 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知道会发生什么。