【问题标题】:RIA DomainService not generating client code using DataContractsRIA DomainService 未使用 DataContracts 生成客户端代码
【发布时间】:2010-09-21 12:38:02
【问题描述】:

我正在开发 Silverlight 4.0 应用程序并使用 RIA 服务。我在服务器端创建了一个应用了 DataContract 和 DataMember 属性的类。

DomainService 将此类公开为查询结果,并因此在客户端上为其生成代码。但不知何故,它不会为类的所有属性生成代码。 guid、string、int、bool 等类型的原始属性生成得很好,但是如果我有自己的复杂类型的属性,则不会在客户端上创建该属性。

这是有问题的课程:

    [DataContract]
    [KnownType(typeof(SummaryGroup))]
    public class SummaryDataSet
    {
        public SummaryDataSet()
        {

        }

        [KeyAttribute]
        [DataMember]
        public Guid Guid { get; set; }

        [DataMember]
        public SummaryGroup SummaryGroup { get; set; }

    }

Guid 属性在客户端上创建就好了。不在客户端上创建 SummaryGroup 属性。以下是 SummaryGroup 的代码:

[DataContract]
public class SummaryGroup
{
    public SummaryGroup()
    {
    }

    [KeyAttribute]
    [DataMember]
    public Guid Guid { get; set; }

    [DataMember]
    public string Name { get; set; }

    [DataMember]
    public int Sequence { get; set; }
}

两个类都在同一个命名空间中。

问题:为什么没有在客户端创建 SummaryDataSet 的 SummaryGroup 属性,我应该如何解决这个问题?

【问题讨论】:

    标签: serialization ria datacontracts


    【解决方案1】:

    WCF RIA 无法处理复杂类型,但您可以试试这个:

        [DataContract]
        [KnownType(typeof(SummaryDataSet))]
        public class SummaryDataSet
        {
            public SummaryDataSet()
            { }
    
            [KeyAttribute]
            [DataMember]
            public Guid Guid { get; set; }
    
            [DataMember]
            [Association("SummarySet_SummaryGrp_FK", "Guid", "Guid")]
            public SummaryGroup SummaryGroup { get; set; }
    
        }
    

    这为 RIA 提供了从 SummaryDataSet 连接到 SummaryGroup 的信息。

    这假设您可以从服务器端服务请求 SummaryDataSet 和 SummaryGroup。

    【讨论】:

    • 是的,使用关联确实是要走的路——我现在可以开始工作了。相关问题:之前从未听说过 DTO(数据传输对象)这个术语,SummaryDataSet 会是一个吗?
    • 我认为这类问题取决于您的观点。 DTO 模式在此处定义en.wikipedia.org/wiki/Data_transfer_object。我认为SummaryDataSet 是WCF RIA 采用DTO 的一个例子。在我的 RIA 项目中,我经常对这些类型的对象进行包装,以使它们更适合我的 MVVM 方法。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多