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双向通讯的技术。这方面有经验的朋友可以分享一下经验。
我在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双向通讯的技术。这方面有经验的朋友可以分享一下经验。
相关文章推荐
- Silverlight传递DataTable终极解决方案
- Silverlight实现查询建模(四) 更新XAP包
- Silverlight实现查询建模(九) 主页面布局
- Silverlight实现查询建模(十) 与Silverlight流程设计器集成
- Silverlight实现查询建模(编外) 源代码及运行方法
- Silverlight实现查询建模(三) XAP包的动态下载
- Silverlight传递DataTable终极解决方案
- Silverlight实现查询建模(二) 项目层次划分
- Silverlight传递DataTable终极解决方案
- Silverlight实现查询建模 系列索引
- Silverlight传递DataTable终极解决方案
- Silverlight实现查询建模(十) 与Silverlight流程设计器集成
- Silverlight实现查询建模(六) 带动画场景跳转
- Silverlight实现查询建模(七) 工具栏的实现与加载
- Silverlight实现查询建模(一) 总揽
- Silverlight实现查询建模(五) 用户登录
- Silverlight实现查询建模(五) 用户登录
- WPF/Silverlight深度解决方案:(十七)GPU硬件加速下Silverlight超性能动画实现(上)
- ArcGIS 10.1 for Server 服务端查询统计 -ArcGIS API for Silverlight 实现
- 【数学建模集训系列】公交查询系统的matlab实现-加入地铁线T2