Услуги SL4 / EF / RIA - возвращение родителей, бабушек и дедушек и бабушек и дедушек в один сервер - PullRequest
1 голос
/ 09 апреля 2011

Допустим, у меня есть Category> SubCategory> SubSubCategory> Item, настроенный в моих сущностях EF.

Каков наилучший способ получить Category, Subcategory, SubSubCategory и Item, где Item.Property = x все в одномодин запрос к серверу с использованием WCF RIA Services?

С помощью .Include я могу получить только детей сущности, а не внуков и дальше вниз (или вверх, в зависимости от того, как вы на это смотрите).

Более того, если я сделаю это ...

 public IQueryable<ToolingTreeItem> GetTree(int currentLocationId)
    {
        var tree = from tc in this.ObjectContext.ToolingCategories
                   from tg in tc.ToolingGroups
                   from tt in tg.ToolingTypes
                   from t in tt.Toolings
                   where t.CurrentLocationId == currentLocationId
                   select new ToolingTreeItem { Cat = tc, Group = tg, Type = tt, Tool = t };

        return tree;
    }

... метод недоступен в моем контексте в проекте на стороне клиента, возможно потому, что мой пользовательский класс сущности ToolingTreeItem не являетсягде-то в загадках глубокой пропасти, которая является службами RIA WCF.

Если это пока не очевидно, все, что я хочу сделать, - это заполнить свой TreeView с помощью Category> SubCategory> SubSubCategory> Item в одномзвонок на сервер.Каков наилучший подход?

Много счастливых возвращений!

Ответы [ 2 ]

1 голос
/ 07 мая 2012

Вы должны иметь возможность загружать объекты с помощью активной загрузки.Предполагая, что вы добавляете «[Включить]» к «родительским» атрибутам в ваших метаданных, должно работать что-то похожее на код ниже (обратите внимание, что я угадал имя всех отношений, поэтому вам, вероятно, потребуется отредактировать код)

public IQueryable<Toolings> GetToolsWithTree(int currentLocationId) 
{ 
    var tree = from t in this.ObjectContext.Tooling.Include("ToolingType.ToolingGroup.ToolingCategory")
               where t.CurrentLocationId == currentLocationId
               select t; 

    return tree; 
} 
0 голосов
/ 22 апреля 2012

Похоже, ToolingTreeItem является сложным объектом, а не сущностью.К сожалению, службы RIA не могут генерировать классы на стороне клиента, которые представляют собой смесь сложных объектов и объектов - класс должен быть полностью одним или другим.Мне известно о двух решениях: сделать ToolingTreeItem «сущностью», поместив атрибут Key в свойство, или просто сделать несколько запросов на данные.Я также нашел это реальное ограничение.

...