在WPF和Silverlight中是否有更好的数据集替代方案?

时间:2010-08-12 01:59:48

标签: wpf silverlight-4.0 dataset

我开发了WPF / XAML应用程序,用于调用从各种源(SQL Server DB,Active Directory,Oracle DB,SAP RFC,XML文件,平面文件等)检索数据的对象(函数或Web服务)。

这些对象总是返回Datasets,然后绑定到datagrids以向用户显示信息,另外我用数据集(连接表,检索元数据/结构,创建新列等)做有趣的事情。

由于WPF适用于桌面,因此在每台计算机上部署应用程序变得繁琐且昂贵,因此我敦促使用“Silverlight业务应用程序”以通过Web访问应用程序,并在不久的将来,轻松适应Windows Phone 7。

从WPF迁移到Silverlight似乎很容易,但我遇到了一些问题,并且主要处于数据管理层面:Silverlight不支持数据集。

我感到有些沮丧,因为我觉得我不得不复制我的所有功能/网络服务并修改它们以返回与数据集不同的对象。

然而,到目前为止,我找不到一个等于或优于数据集的对象,顺便说一句,它也可以让我在Silverlight和WPF中交替使用它。

有没有人找到超越数据集提供的强大而方便的解决方案?如果是,请通过示例或链接告诉我以便学习。

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您的最终用户都在使用Windows且位于同一网络上,那么您最好不要使用WPF并使用ClickOnce。我碰巧喜欢WPF和Silverlight,但是对于人们认为理所当然的事情,例如文件关联,多个窗口,与其他应用程序集成等,Silverlight是一个很大的怪异事。

但是要回答您的问题,您可能需要重新设计数据访问策略并使用LINQ和WCF数据服务。 Visual Studio中的工具支持将允许您生成在数据库模式之后建模的类,并且Silverlight / WPF UI可以直接绑定到这些类。

this project on CodePlex似乎有一个DataSet / DataTable的最小实现,但老实说我不建议坚持使用DataSet。 Silverlight不支持DataSet的原因是因为人们已经发言并且开发人员拒绝了向导驱动的DataSet模型,而采用了更清晰,更灵活的ORM(对象关系映射)技术,如nHibernate或LINQ。

答案 1 :(得分:0)

我没有很多使用Silverlight的经验,但是对于WPF,我使用Entity Framework非常成功(版本4,.NET 3.5附带的EF就是这样)。

一旦定义了类并将它们映射到数据库表,就可以完成数据集所需的各种事情。

例如:数据验证。在实体框架中,实体类是部分类,因此您可以在很大程度上自定义它们。我使用一些跟踪无效属性值的字典将验证码放在那里。这里和那里有一点iDataErrorInfo,瞧,我有轻松的可绑定数据验证,可以触发UI中的样式更改。

我还没有尝试过NHibernate或任何其他ORM工具。有一天我会,但现在我发现EF足够我的目的。易于弄清楚,易于实现,大量定制,可以与LINQ(LINQ to Entities)一起使用,并且它在WPF中运行得非常好。

科里