在 WPF、Silverlight 和 ASP.NET 之间共享一个公共 DAL

Posted

技术标签:

【中文标题】在 WPF、Silverlight 和 ASP.NET 之间共享一个公共 DAL【英文标题】:Sharing a common DAL between WPF, Silverlight, and ASP.NET 【发布时间】:2011-04-21 03:50:39 【问题描述】:

在 WPF、Silverlight 和 ASP.NET 之间共享同一数据访问层的最佳方法/技术是什么?

我正在使用 ADO.NET 实体框架,并且正在考虑使用存储库模式创建 DAL。然后使用 RIA 服务作为虚拟中间人来连接 Silverlight 和 ASP.NET。这是一个可靠的计划还是有其他更好的解决方案?

【问题讨论】:

【参考方案1】:

我喜欢使用的解决方案之一如下: - 有一个项目只存储实体(例如:玩家、游戏、实体),根本不引用数据库。 - 有一个项目实现存储库模式(存储库,存储库等......) - 使用 ADO.NET 实体框架代码优先方法与数据库进行映射(它会创建项目中包含的实体的动态子对象,有关如何使用它的说明,请参阅 ScottGu 的博客)

可以使用 Ria 服务或经典 WCF 服务将 Silverlight 连接到您的模式。通常我会尽可能使用 WCF,因为 Ria 服务并不真正符合 MVVM 开发。

如果您想使用 WCF 并与 Silverlight 共享您的 DAL 实体,您可以创建一个 MyDal.Silverlight Silverlight 类库项目并添加符号链接,而不是您希望与 Silverlight 共享的每个实体的副本。然后,当您使用 Visual Studio 添加服务引用时,它会很聪明,不会从 Player、Game 和 User 为您的 Silverlight 项目创建副本。

如果您想使用 Ria 服务,它无论如何都会创建您实体的副本。

希望有帮助

约翰

【讨论】:

【参考方案2】:

RIA 服务

RIA 服务肯定会为您减轻所有 WCF 管道的负担。它有一些小缺陷(缺少某些数据类型),但对于大多数问题都有解决方法。

验证模型(使用属性修饰和自定义验证器)非常强大,是挂业务规则的好地方。

RIA 与 ASP.Net 愉快地共存,这是另一个优点。在幕后,它只是另一个 WCF 服务。我们很高兴将 RIA 服务与 MVVM Prism 一起使用。

ADO.Net EF 模型

这是一个久经考验的功能丰富模型。我发现的唯一问题与多对多关系有关。还有一些解决方法。

DAL

由于 RIA 变更集是为您管理的,包括POCO,这是最需要关注的领域。将您的 EF 模型直接暴露给 RIA 被认为是“不好的”,这肯定不会使您免受数据更改的影响。

我还不能特别推荐任何一种模式(仍在试验中),但请确保您的选择与 IQueryable 兼容。分页功能和附加到 Linq 查询以供服务器端执行是您不想失去的功能!

【讨论】:

以上是关于在 WPF、Silverlight 和 ASP.NET 之间共享一个公共 DAL的主要内容,如果未能解决你的问题,请参考以下文章

在 WPF、Silverlight 和 ASP.NET 之间共享一个公共 DAL

wpf和silverlight有啥不同

什么音频格式适用于 Silverlight + WPF?

将 Silverlight 移植到 WPF

如何处理 SilverLight 4 和 WPF 应用程序的 WCF 身份验证

WPF/Silverlight:裁剪到网格单元大小和 RenderTransform