客户不提供RIA服务中的定制属性

时间:2011-03-25 03:54:00

标签: silverlight silverlight-4.0 silverlight-3.0 wcf-ria-services

我有一个名为StatusUpdates的实体。它没有自我加入。但是我想要包含一个类型为StatusUpdates的InternalStatusUpdates列表(再次提到数据库中没有自连接)。所以我在同一个命名空间中创建了一个部分类,并创建了一个名为InternalStatusUpdates的属性,并在其上包含[DataMember]属性。但它仍未出现在客户端上。这是我的具体部分课程: -

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using System.Runtime.Serialization;
using System.ServiceModel.DomainServices.Server;
using System.ComponentModel.DataAnnotations;

namespace FMT.Data.Web
{
    public partial class StatusUpdate : EntityObject
    {

         private List<StatusUpdate> _internalListStatusUpdates = new List<StatusUpdate>();
         [DataMember]
         public List<StatusUpdate> InternalListStatusUpdates
         {
             get { return _internalListStatusUpdates; }
             set {
                 _internalListStatusUpdates = value;
                 OnPropertyChanged("InternalListStatusUpdates");
             }
         }
    }
}

有趣的是,如果我将List<StatusUpdate>更改为List<string>,则可以在客户端上使用!我该如何解决这个问题?

我想因为它是实体类型我必须指定[Include]。当我这样做时,我得到以下错误: -

Invalid Include specification for member 'StatusUpdate.InternalListStatusUpdates'. Non-projection includes can only be specified on members with the AssociationAttribute applied.

然后我继续指定关联,所以现在我的财产看起来像: -

private List<StatusUpdate> _internalListStatusUpdates = new List<StatusUpdate>();
     [DataMember]
    [Include]
    [Association("internalUpdates", "StatusUpdatesId", "StatusUpdatesId")]
     public List<StatusUpdate> InternalListStatusUpdates
     {
         get { return _internalListStatusUpdates; }
         set {
             _internalListStatusUpdates = value;
             OnPropertyChanged("InternalListStatusUpdates");
         }
     }

其中StatusUpdatesIdStatusUpdates实体中的主键,而internalUpdates只是选择的任意名称。现在构建是成功的,并且该属性在客户端上可用,但是我从服务器填充的数据在客户端上不可用。我该如何解决?

提前致谢:)

2 个答案:

答案 0 :(得分:7)

AssociationAttribute中的第三个参数是列表元素中的外键属性的名称。重要的是要记住,RIA Services将实体放在相应的EntitySet<T>中,然后在主键和外键上应用过滤器,而不是使用对其他对象的真实引用。

在给定的情况下,您可能必须为列表元素定义属性“ParentUpdatesId”,并使用父StatusUpdate的主键填充该属性。

示例:

StatusUpdate su = new StatusUpdate { StatusUpdatesId = 123 };
StatusUpdate child1 = new StatusUpdate { StatusUpdatesId = 1001, ParentUpdatesId = 123 };
StatusUpdate child2 = new StatusUpdate { StatusUpdatesId = 1002, ParentUpdatesId = 123 };
su.InternalListStatusUpdates.Add(child1);
su.InternalListStatusUpdates.Add(child2);

您的协会将如下所示:

[Include]
[Association("internalUpdates", "StatusUpdatesId", "ParentUpdatesId")]
public List<StatusUpdate> InternalListStatusUpdates { ... }

答案 1 :(得分:0)

我在搜索错误后来到此页面 &#34;非投影包含只能在具有associationattribute&#34;

的成员上指定

以防万一你同样...... 我的问题是我包含了习惯中的包含,但在这个特殊情况下,我通过链接表加入了多对多的表,并且正在使用RIA Services M2M,所以通过投影指定了其他地方的特定包含。 我收到的错误消息是误导性的,删除Include修复它。