Служба RIA EF создает объект MessageObject со списками объектов в качестве свойств - PullRequest
0 голосов
/ 05 января 2012

Я создал объект сообщения с тремя свойствами, которые представляют собой три списка из трех разных типов объектов. Я создал класс сообщений, потому что я пытаюсь выполнить поиск по всем тем, что вернет все объекты, которые соответствуют критериям поиска. Я хотел бы сделать это за один вызов, а не за три (по одному для каждой сущности) отдельных вызовов. Он компилируется, и дизайнер на стороне клиента генерирует сущности, метод Search All службы, класс объекта сообщения, но не свойства объекта сообщения. Возможно ли это с RIA Services? и если да, что вы можете объяснить, что я делаю неправильно и почему? Спасибо!

Объявление класса на стороне сервера:

[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 голосов
/ 05 января 2012

Предполагая, что ваш SearchAllMessage и содержащиеся в нем элементы доступны только для чтения, вы должны пометить его как ComplexType.Все, что вам нужно сделать, это добавить атрибут к каждому из участвующих классов (SearchAllMessage, Entity1 и т. Д.)

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

ComplexTypeAttribute является членом сборки EntityFramework.

Если вы намереваетесь сделать объекты запрашиваемыми и обновляемыми, вам нужно будет пойти по пути использования [Association(...)], [Include] и [Composition].

...