2011-06-27 90 views
0

我正在开发Silverlight RIA服务解决方案。其中一个要求是向客户端“推送”通知,我正在使用对服务器的阻塞调用来实现这一点,当接收到更新时会返回。这个尝试使用通用的结构来实现,我已经来到这个数据结构:RIA服务变更跟踪

public class Change 
{ 
    public ObjectType Type { get; internal set; } // objecttype is an enum 
    public int ObjectKey { get; internal set; } 
    public string PropertyName { get; internal set; } 
    public object OldValue { get; internal set; } 
    public object NewValue { get; internal set; } 
    //key required for RIA Services 
    [Key] 
    public Guid ChangeGuid { get; private set; } 
} 

除了在这个设计中的一些明显的缺陷(这只是一个测试),性能OldValueNewValue不可见客户端,由于它们的类型的对象。这些属性的值将始终为Entity Framework primitive

有没有办法让OldValueNewValue到客户端而不将所有内容都转换为字符串?

由于object关键字凌乱搜索结果,谷歌搜索没有让我走得很远。

有关我的问题的任何通用解决方案,我们感激。

+0

你的意思是这个类型要么是一个String,DateTime或者其他一些原始类型,而且你不确定它在编译时的类型是什么? –

+0

@Isaac确切地说,它可以是任何用作实体框架对象属性的类型。请参阅http://msdn.microsoft.com/en-us/library/ee382832.aspx – Bas

回答

0

如果将WCF作为“对象”序列化,则不能在客户端隐式地重新引入其他接口/类型。无论如何,你都要将它们串起来。

关于什么样的对象“它确实是”的内部细节不会在序列化中保留。

如何为一个可为空的成员,每个ObjectType枚举值,并只设置一个你需要的?这可能会给传输的数据增加一个小的开销,但可能更易于管理,并且会为您提供强类型对象。

+0

实际上,ObjectType是对象本身,而不是属性,但我可以添加属性类型来执行此操作,但这仍然需要每个实体框架原语的属性。 – Bas