【问题标题】:Issue with passing objects to domain method将对象传递给域方法的问题
【发布时间】:2011-11-21 02:12:22
【问题描述】:

我有带有 DTO 对象的 WCF Ria 服务应用程序。我定义了我的 DTO 对象之间的关系:

[Include] 
    [Association("FK_Items_OrderID", "ID", "OrderID")] 
    public List<Item> Items { get; set; }

所以我可以看到客户端上的项目集合并使用它进行操作。然后我想保存更改并调用此方法:

 [Invoke]
    public void SaveOrderChanges(Order order)
    {
        _dataManager.SaveOrderChanges(order);
    }

是领域服务方式。但是我看到这里的 Order 对象中相关 Items 的集合已经是 NULL,但是当我在客户端上调用此方法并将 order 传递给此方法时,集合已填充。

有人知道该怎么做吗?谢谢。

【问题讨论】:

    标签: wcf-ria-services invoke dto domainservices


    【解决方案1】:

    这是因为客户端序列化程序不包含关联。 Wcf ria 服务有不同的方式来处理这种场景,但这涉及到使用 DomainContext 和标准的 Get/Insert/Update/Delete 方法。 我的建议是将保存方法的符号更改为

    [Invoke]
    public void SaveOrderChanges(string serializedOrder)
    {
        Order order = MyCustomSerializer.Deserialize<Order>(serializedOrder);
        _dataManager.SaveOrderChanges(order);
    }
    

    这是一个实用程序类,我用它来序列化和反序列化对象,但是应该欺骗它来包含 Items 集合。

    public static class Serialization
    {
        public static string Serialize<T>(T obj)
        {
            //Create a stream to serialize the object to.
            var ms = new MemoryStream();
    
            // Serializer the User object to the stream.
            var ser = new DataContractSerializer(typeof (T));
    
    
            ser.WriteObject(ms, obj);
            byte[] array = ms.ToArray();
            ms.Close();
            return Encoding.UTF8.GetString(array, 0, array.Length);
        }
    
        public static T Deserialize<T>(string obj) where T : class
        {
            if (obj == null)
                return null;
            var serializer = new DataContractSerializer(typeof (T));
            var stream = new MemoryStream(Encoding.UTF8.GetBytes(obj));
            var result = serializer.ReadObject(stream) as T;
            return result;
        }
    }
    

    当然,您需要做相反的客户端并序列化您的订单和商品。 这是我知道的最简单的方法,但是您也可以查看here。 最终,尝试按照 WCF Ria 的预期方式重构您的代码(基于上下文)

    希望这会有所帮助,
    马可

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      • 2023-03-09
      • 2011-09-27
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多