我有一个名为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");
}
}
其中StatusUpdatesId
是StatusUpdates
实体中的主键,而internalUpdates
只是选择的任意名称。现在构建是成功的,并且该属性在客户端上可用,但是我从服务器填充的数据在客户端上不可用。我该如何解决?
提前致谢:)
答案 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修复它。