Внешняя таблица структуры сущности не доступна в коде xaml - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь вытащить IQueryable из моего класса DomainService в свой код XAML, используя службы RIA.

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 голосов
/ 16 ноября 2010

Проблема заключалась в том, что моя Entity Model не является частью моего приложения ASP.Net/RIA.На него ссылаются только в.

Поскольку это ссылка, DomainService не будет автоматически генерировать метаданные.Мне пришлось вручную создавать метаданные, чтобы Silverlight знал, чего ожидать.

0 голосов
/ 13 ноября 2010

Ваш код отправки и получения выглядит совершенно корректно. Если серверная сторона правильно возвращает объекты в вашем тестовом коде, значит, что-то пошло не так.Я пробовал несколько вариантов и не могу получить похожий код, который не может когда-либо .

Кроме того, у вас есть 3 варианта доступа к коллекции, возвращенной службами RIA:

1.Используйте конкретную коллекцию в контексте (как вы сделали)

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

2.Используйте операцию загрузки свойства Entities

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 для любых пользовательских ответов (просто для того, чтобы не пропустить строки кода).

...