Как поместить сущности и коллекцию сущностей в DTO в Silverlight — WCF RIA?

Я хотел бы создать DTO, который содержит Entities. Как мне это сделать? Является ли это возможным?

Например, у меня есть что-то подобное в моем серверном проекте:

public class MyCustomDTO
{   
    [Key]
    public int id { get; set; }

    public EntityCollection<MyEntity> list { get; set; }

    public MyEntity2 dummyproperty { get; set; }

    public string name{ get; set; }
}

Но на стороне клиента генерируются только базовые типы, а коллекция и типизированное свойство MyEntity2 — нет.

Моя цель - инкапсулировать несколько разных сущностей в один DTO, а не собирать их с помощью нескольких асинхронных запросов...

Или какие другие решения могут подойти для этого сценария? Я что-то упустил (некоторые атрибуты) или он просто не поддерживается?


person seekingtheoptimal    schedule 29.10.2011    source источник


Ответы (2)


Вам необходимо предоставить доступ к другим объектам как к методам службы в дополнение к вашему DTO, чтобы службы RIA могли отслеживать их на стороне клиента. Ваш сервис должен выглядеть так:

public class MyDomainService : LinqToEntitiesDomainService<MyContext>
{
    public IQueryable<MyCustomDto> GetMyCustomDtos()
    {
        //...
    }

    public IQueryable<MyEntity> GetMyEntitys()
    {
        //...
    }

    public IQueryable<MyEntity2> GetMyEntity2s()
    {
        //...
    }
}

Вам также потребуется добавить атрибут [Include] к вашим объектам, чтобы они извлекались на стороне клиента.

person Tevin    schedule 21.02.2012

Вы можете отправлять сложный тип между клиентом Silverlight и службой WCF RIA, но ваш DTO не должен иметь атрибут [Key], применяемый к свойству.

public class MyCustomDTO
{   
    //[Key] // comment this line and there you go.
    public int id { get; set; }

    public List<MyEntity> list { get; set; }

    public MyEntity2 dummyproperty { get; set; }

    public string name{ get; set; }
}

Обновить

Вам необходимо установить WCF RIA Services V1.0 SP1 для Silverlight 4 прежде чем вы сможете использовать сложный тип в своем приложении. WCF RIA Services V1.0 SP1 — хорошая статья об изменениях в этой службе. пакет.

person Ekk    schedule 29.10.2011
comment
Я пытался, но потом получаю сообщение об ошибке, говорящее о том, что объект в DomainService не имеет определенного ключа. Сущности, предоставляемые операциями DomainService, должны иметь по крайней мере одно общедоступное свойство, помеченное KeyAttribute Итак, как я прочитал здесь forums.silverlight.net/t/202531.aspx , доменная служба RIA может работать только с объектами, поэтому вы не можете просто отправить сложный тип, только как часть объекта. - person seekingtheoptimal; 30.10.2011
comment
Вам нужно установить WCF RIA SP1 для Silverlight, я просто обновляю свой ответ. - person Ekk; 30.10.2011
comment
Я сделал, но все еще не работает. Я думаю, поскольку мой DomainService является LinqToEntitiesDomainService, я просто не могу отправить обратно что-либо, кроме объектов. Должен ли я создать еще один доменный сервис, не унаследованный от LinqToEntitiesDomainService? (моя текущая служба домена была сгенерирована из файла .edmx, и я расширил ее с помощью пользовательских запросов в отдельном файле после того, как сделал частичный класс обслуживания) - person seekingtheoptimal; 30.10.2011