发生这种情况是因为客户端序列化程序不包含关联。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;
}
}
当然,您需要做相反的客户端并序列化您的订单和商品。这是我知道的最简单的方法,但是您也可以在这里查看。最终,尝试以 WCF Ria 的方式重构您的代码(基于上下文)
希望这会有所帮助,
马可