1

我想製作一個包含實體的DTO。我應該怎麼做?可能嗎?如何在Silverlight中將實體和實體集合放入DTO中 - WCF RIA?

例如,我有這樣的事情在我的服務器項目:

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,而不是用多個異步查詢,收集他們...

或者有什麼不同的解決方案可能是適合這種情況?我是否缺少某些東西(某些屬性),或者只是不支持?

回答

0

除了DTO之外,您還需要公開其他實體作爲服務方法,以便RIA服務可以在客戶端跟蹤它們。您的服務應該是這樣的:

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

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

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

你還需要到[包含]屬性添加到您的實體,使它們在客戶端檢索。

0

您可以在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 for Silverlight 4,然後才能在應用程序中使用複雜類型。 WCF RIA Services V1.0 SP1是關於此服務包中的更改的好文章。

+0

我試過了,但後來我得到一個錯誤,說「DomainService中的實體沒有定義鍵,DomainService操作暴露的實體必須至少有一個標有KeyAttribute的公共屬性」所以就像我在這裏讀過的http ://forums.silverlight.net/t/202531.aspx,RIA域服務只能與實體一起工作,所以你不能只發送一個複雜類型,只能作爲實體的一部分。 –

+0

您需要爲Silverlight安裝WCF RIA SP1,我只需更新我的答案。 – Ekk

+0

我做了,但仍然沒有工作。我想因爲我的DomainService是一個LinqToEntitiesDomainService我只是不能發回任何其他的實體。我應該做另一個不是從LinqToEntitiesDomainService繼承的DomainService嗎? (我的當前域服務是從.edmx文件生成的,並且在將服務類部分化後,我用自定義查詢將其擴展爲單獨的文件) –