【问题标题】:How to put entities and collection of entities inside a DTO in Silverlight - WCF RIA?如何将实体和实体集合放入 Silverlight 中的 DTO - WCF RIA?
【发布时间】:2011-10-29 16:20:57
【问题描述】:

我想制作一个包含实体的 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 中,而不是通过多个异步查询来收集它们...

或者什么不同的解决方案可能适合这种情况?我是否遗漏了某些东西(某些属性)或者它只是不受支持?

【问题讨论】:

    标签: silverlight entity-framework wcf-ria-services dto presentation-model


    【解决方案1】:

    除了 DTO 之外,您还需要将其他实体公开为服务方法,以便 RIA 服务可以在客户端跟踪它们。您的服务应如下所示:

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

    您还需要将 [Include] 属性添加到您的实体,以便在客户端检索它们。

    【讨论】:

      【解决方案2】:

      您可以在 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 是关于此服务包更改的好文章。

      【讨论】:

      • 我试过了,但后来我收到一条错误消息,提示“DomainService 中的实体没有定义键。DomainService 操作公开的实体必须至少有一个标有 KeyAttribute 的公共属性”所以就像我'在这里阅读forums.silverlight.net/t/202531.aspx ,RIA 域服务只能与实体一起使用,因此您不能只发送复杂类型,只能作为实体的一部分。
      • 你需要为 Silverlight 安装 WCF RIA SP1,我只是更新我的答案。
      • 我做了但仍然没有工作。我认为因为我的 DomainService 是一个 LinqToEntitiesDomainService 我只是不能发回实体以外的任何东西。我应该创建另一个不是从 LinqToEntitiesDomainService 继承的 DomainService 吗? (我当前的域服务是从 .edmx 文件生成的,在我将服务类设为部分后,我在单独的文件中使用自定义查询对其进行了扩展)
      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      • 2011-01-04
      相关资源
      最近更新 更多