Как получить сущность плюс ее дочерние сущности через RIA Services - PullRequest
0 голосов
/ 06 ноября 2010

Я новичок в EF и RIA, поэтому я не уверен, должно ли это работать или нет.

У меня есть простая модель, показанная здесь:

alt text

Я добавил POCO-шаблоны для структуры сущностей и все подключено так, как я могу, чтобы получить Lazy Loading, уведомления об изменениях и исправления отношений ... (я действительно надеюсь, что вы все еще читаете)

Дело в том, что, находясь на сервере, я могу загрузить подкомпоненты компонента, просто вызвав comp.SubComponents. НО, по какой-то причине у меня нет этой возможности на стороне клиента ... Мой класс Component из RIAServices.web.g.cs (сгенерированный код) не имеет списка SubComponent.

Это так должно работать? Должен ли я иметь эту функцию в RIA Service?

public IEnumerable<SubComponent> GetSubComponents(int componentId)
{
    return m_ctx.SubComponents
           .Where(x => x.Component.Id == componentId)
           .OrderBy(x => x.Name);
}

Ответы [ 2 ]

1 голос
/ 06 ноября 2010

Я не очень разбираюсь в услугах RIA, но я сомневаюсь, что отложенная загрузка может работать на стороне клиента ... Я думаю, вам нужно загружать SubComponents с нетерпением, когда вы загружаете Components, прежде чем отправлять ихклиенту:

public IEnumerable<Component> GetComponents()
{
    return m_ctx.Components.Include("SubComponents")
           .OrderBy(x => x.Name);
}
0 голосов
/ 06 ноября 2010

В моих метаданных мне не хватало атрибутов [Include] и [Association] в свойстве SubComponent метаданных моего Компонента.Класс должен выглядеть следующим образом:

[MetadataType(typeof(Component.Metadata))]
public partial class Component
{
    internal sealed class Metadata
    {
        [Key]
        public int Id { get; set; }

        [Include]
        [Association("ComponentSubComponent","Id", "ComponentId")]
        public ICollection<SubComponent> SubComponents { get; set; }

    }
}

Надеюсь, это кому-нибудь поможет:)

дополнительный совет : у меня возникли проблемы с добавлением атрибута [Include] причинаЯ не ссылался на правильную сборку.Убедитесь, что вы добавили ссылку на System.ServiceModel.DomainServices.Server.dll

Редактировать : я забыл упомянуть, что мне также не хватает свойства ComponentId в сущности SubComponent

alt text

...