Как поместить сущности и набор сущностей в DTO в Silverlight - WCF RIA?
Я хотел бы сделать DTO, который содержит сущности. Как мне это сделать? Является ли это возможным?
Например, у меня есть что-то вроде этого в моем проекте сервера:
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, а не собирать их с помощью нескольких асинхронных запросов...
Или какие разные решения могут подойти для этого сценария? Я что-то упускаю (некоторые атрибуты) или просто не поддерживается?
2 ответа
Вам необходимо представить другие объекты в качестве методов обслуживания в дополнение к вашему DTO, чтобы службы RIA могли отслеживать их на стороне клиента. Ваш сервис должен выглядеть так:
public class MyDomainService : LinqToEntitiesDomainService<MyContext>
{
public IQueryable<MyCustomDto> GetMyCustomDtos()
{
//...
}
public IQueryable<MyEntity> GetMyEntitys()
{
//...
}
public IQueryable<MyEntity2> GetMyEntity2s()
{
//...
}
}
Вам также необходимо добавить атрибут [Включить] для ваших сущностей, чтобы они были получены на стороне клиента.
Вы можете отправить сложный тип между клиентом Silverlight и службой RIA WCF, но ваш 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 - хорошая статья об изменениях в этом пакете обновления.