RIA服务EF使用实体列表作为属性创建MessageObject

时间:2012-01-04 21:33:49

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

我创建了一个消息对象,其中包含三个属性,这三个属性是三个不同实体类型的列表。我创建了消息类,因为我正在尝试进行所有将返回符合搜索条件的所有实体的搜索。我想在一次通话中这样做,而不是三次(每个实体一次)单独的通话。它编译并且客户端设计者生成实体,服务的Search All方法,消息对象类,但不生成消息对象属性。 这可能与RIA服务有关吗?如果是这样,你能解释我做错了什么以及为什么?谢谢!

服务器端类声明:

[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; }
}

客户端设计人员生成代码:

/// <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)

1 个答案:

答案 0 :(得分:0)

假设您的SearchAllMessage及其包含的项目是只读的,您应将其标记为ComplexType。您所要做的就是为所涉及的每个类添加一个属性(SearchAllMessageEntity1等。)

[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; }
}

ComplexTypeAttributeEntityFramework程序集的成员。

如果您打算让实体可查询和可更新,那么您需要沿着使用[Association(...)][Include][Composition]的路径前进。