如何通过RIA服务获取实体及其子实体

时间:2010-11-05 23:21:17

标签: entity-framework entity-framework-4 poco wcf-ria-services

我是EF和RIA的新手,所以我不确定这是否应该起作用。

我有一个简单的模型:

alt text

我添加了POCO templates for entity framework,所有内容都已连线,因此我可以获得延迟加载,更改通知和关系修复...(我真的希望你还在阅读)

事情是,在服务器上,我可以通过简单地调用comp.SubComponents来加载Component的SubComponents。但是,出于某种原因,我在客户端没有该功能... Component(生成的代码)中的RIAServices.web.g.cs类没有SubComponent列表。

这是假设的工作方式吗?我应该在RIA服务上有这个功能吗?

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

2 个答案:

答案 0 :(得分:1)

我对RIA服务了解不多,但我怀疑延迟加载可以在客户端工作......我认为你需要在加载SubComponents时急切加载Components,在将它们发送给客户之前:

public IEnumerable<Component> GetComponents()
{
    return m_ctx.Components.Include("SubComponents")
           .OrderBy(x => x.Name);
}

答案 1 :(得分:0)

在我的元数据中,我在Componet的元数据SubComponent属性中缺少属性[Include][Association]。该课程必须如下:

[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

的引用

编辑:我忘了提到我在SubComponent实体上也缺少ComponentId属性

alt text