Wcf RIA服务EF使用实体列表作为属性创建MessageObject
我创建了一个具有三个属性的消息对象,这三个属性是三种不同实体类型的三个列表。我创建message类是因为我正在尝试执行一个搜索all,它将返回符合搜索条件的所有实体。我希望在一次调用中完成此操作,而不是三次(每个实体一次)单独调用。它进行编译,客户端设计器生成实体、服务的Search All方法、消息对象类,但不生成消息对象属性。 RIA服务是否可以做到这一点?如果是这样,你能解释我做错了什么,为什么?谢谢 服务器端类声明:Wcf RIA服务EF使用实体列表作为属性创建MessageObject,wcf,entity-framework,wcf-ria-services,Wcf,Entity Framework,Wcf Ria Services,我创建了一个具有三个属性的消息对象,这三个属性是三种不同实体类型的三个列表。我创建message类是因为我正在尝试执行一个搜索all,它将返回符合搜索条件的所有实体。我希望在一次调用中完成此操作,而不是三次(每个实体一次)单独调用。它进行编译,客户端设计器生成实体、服务的Search All方法、消息对象类,但不生成消息对象属性。 RIA服务是否可以做到这一点?如果是这样,你能解释我做错了什么,为什么?谢谢 服务器端类声明: [Serializable] [DataContract(IsRefe
[Serializable]
[DataContract(IsReference = true)]
public class SearchAllMessage
{
[DataMember]
public List<Entity1> Entity1List { get; set; }
[DataMember]
public List<Entity2> Entity2List { get; set; }
[DataMember]
public List<Entity3> Entity3List { get; set; }
}
假设您的
SearchAllMessage
及其包含的项目是只读的,您应该将其标记为ComplexType
。您所要做的就是为涉及的每个类添加一个属性(SearchAllMessage
,Entity1
,等等)
[可序列化]
[DataContract(IsReference=true)]
[复合类型]
公共类SearchAllMessage
{
[数据成员]
公共列表Entity1List{get;set;}
[数据成员]
公共列表Entity2List{get;set;}
[数据成员]
公共列表Entity3List{get;set;}
}
ComplexTypeAttribute
是EntityFramework
程序集的成员
如果您打算使实体可查询和更新,那么您需要继续使用
[关联(…)]
、[包含]
、和[组合]
感谢您的帮助!我将[ComplexTypeAttribute]添加到类中,现在在我看到的客户端生成的文件中“-属性”System.ComponentModel.DataAnnotations.ComplexTypeAttribute”在客户端项目“MyProject.RiaService”中不可见。是否缺少程序集引用?我找不到任何具有ComplexTypeAttribute类的Silverlight 4 dll。您知道什么Silverlight 4 dll具有该属性吗?我是否也需要将此类添加到MyDomainService.metadata.cs文件中?顺便说一句,我有WCF RIA Servics V1.0 SP2策略,该属性位于EntityFramework DLL中。到目前为止,我一直认为它来自System.ComponentModel.DataAnnotations或WCF RIA程序集。
/// <summary>
/// The 'SearchAllMessage' class.
/// </summary>
[DataContract(Namespace="http://schemas.datacontract.org/2004/07/SharebackMaintenance.RiaService.Web")]
public sealed partial class SearchAllMessage : ComplexObject
{
#region Extensibility Method Definitions
/// <summary>
/// This method is invoked from the constructor once initialization is complete and
/// can be used for further object setup.
/// </summary>
partial void OnCreated();
#endregion
/// <summary>
/// Initializes a new instance of the <see cref="SearchAllMessage"/> class.
/// </summary>
public SearchAllMessage()
{
this.OnCreated();
}
}
[Invoke]
public SearchAllMessage SearchAll(string fiterA, string filterB, int filterC)
[Serializable]
[DataContract(IsReference = true)]
[ComplexType]
public class SearchAllMessage
{
[DataMember]
public List<Entity1> Entity1List { get; set; }
[DataMember]
public List<Entity2> Entity2List { get; set; }
[DataMember]
public List<Entity3> Entity3List { get; set; }
}