Если вы создаете DomainService, открывая объект, можете ли вы получить доступ к совокупным объектам?

Допустим, вы создаете RIA DomainService и включаете в него объект Person (показан ниже), можете ли вы получить доступ к агрегатным объектам этого объекта?

Например, если у меня есть такие объекты (имейте в виду, что это наивное представление, они моделируются с помощью дизайнера EF4):

public class Person
{
    string FirstName { get; set; }
    PhoneNumber { get; set; }
}

public class PhoneNumber
{
    public string AreaCode { get; set; }
    public string Trunk { get; set; }
    public string Number { get; set; }
}

Если я включу Person при создании PeopleDomainService, сможет ли клиент получить доступ к PhoneNumber на нем (и изменить его)?


person Steven Evers    schedule 08.12.2010    source источник


Ответы (2)


Да, вы можете привлекать связанные сущности.

В файле PeopleDomainService.metadata.cs найдите класс PersonMetadata. В свойстве PhoneNumbers добавьте атрибут «Включить»:

[Include]:
public EntityCollection<PhoneNumber> PhoneNumbers { get; set; }

В PeopleDomainService.cs найдите функцию GetPersons и измените ее, включив в нее PhoneNumbers:

public IQueryable<Person> GetPersons()
{
    return this.ObjectContext.Persons.Include("PhoneNumbers");
}

Дополнительные сведения можно найти в MSDN > Пошаговое руководство. Обзор сервисов RIA > Отображение связанных данных

person sparks    schedule 09.12.2010
comment
+1. Спасибо за совет. Для будущих читателей мне также пришлось добавить в коллекцию атрибут [Association(name, thisKey, otherKey)], а также атрибут Include. - person Steven Evers; 09.12.2010

Вы можете дополнить атрибут PhoneNumber объекта Person атрибутом [Include]. Не забудьте также включить оператор include в запрос LINQ при получении объекта Person.

person Rus    schedule 08.12.2010