您的位置:首页 > 其它

Silverlight实现查询建模(八) 传递DataTable解决方案

2009-09-12 22:05 615 查看
我们都知道Silverlight端不能直接使用DataTable,DataSet等数据存储。但某些情况下实体类的传递方式根本无法满足我们的需求。举个例子,在进行查询建模时我们根本不知道用户从哪张表选择字段,更有甚者我们还可能不知道用户从哪个数据源选择表(这个问题我通过SmartDAL的特性加以支持)。这种情况下我们无法建立实体类定义。这也是我使用C#,Java这些静态语言感觉最不爽的地方。动态语言中这种处理相当简单。
我在XCenter中的实现思想就是Server端(WCF实现端)将SmartDAL取出的DataTable分为数据和元数据两部分存储并通过WCF端进行传递。在Silverlight端根据元数据信息动态生成并编译出动态实体类实例。并填充真实的待绑定集合。由于在Silverlight端动态生成并编译实体类的过程比较耗时所以在Silverlight端建立了缓存。并用元数据中的唯一Id进行标识。
元数据定义在XCenter.Framework.Public.DataSetData命名空间。主要结构就是3个类。
Field.cs 字段信息(部分定义)

Code
public partial class App : Application,ISessionApp
{

#region Prop

private Dictionary<string, object> session =
new Dictionary<string, object>();
private Dictionary<string, Type> tempClassDic =
new Dictionary<string, Type>();

只不过通过WindowHelper进行了引用。WindowHelper.TempClassDic。
最后要提醒读者,到这里这个解决方案并不完美,因为我们没有考虑数据量的问题。当数据量很大时WCF传递数据会有问题。我们可以将DataSetData中的List<List<object>>数据的形式改为Byte[]并进行压缩再传递(或者是JSON),这样的话SL端又多了一道加压缩的过程。但个人认为这并不是最完善的解决方法。最终突破数据量的问题可能最好的还是分块传递。可能用到WCF双向通讯的技术。这方面有经验的朋友可以分享一下经验。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: