在 WPF、Silverlight 和 ASP.NET 之间共享相同数据访问层的最佳方法/技术是什么?
我正在使用 ADO.NET 实体框架,并且正在考虑使用存储库模式创建 DAL。然后使用 RIA 服务作为虚拟中间人来连接 Silverlight 和 ASP.NET。这是一个可靠的计划还是有其他更好的解决方案?
在 WPF、Silverlight 和 ASP.NET 之间共享相同数据访问层的最佳方法/技术是什么?
我正在使用 ADO.NET 实体框架,并且正在考虑使用存储库模式创建 DAL。然后使用 RIA 服务作为虚拟中间人来连接 Silverlight 和 ASP.NET。这是一个可靠的计划还是有其他更好的解决方案?
我喜欢使用的解决方案之一如下: - 有一个项目只存储实体(例如:玩家、游戏、实体),根本不参考数据库。- 有一个项目实现存储库模式(存储库、存储库等...) - 使用 ADO.NET 实体框架代码优先方法与数据库进行映射(它创建项目中包含的实体的动态子对象,请参阅 ScottGu 的博客有关如何使用它的说明)
可以使用 Ria 服务或经典 WCF 服务将 Silverlight 连接到您的模式。通常我会尽可能地尝试使用 WCF,因为 Ria 服务并不真正符合 MVVM 开发。
如果您想使用 WCF 并与 Silverlight 共享您的 DAL 实体,您可以创建一个 MyDal.Silverlight Silverlight 类库项目并添加符号链接,而不是您希望与 Silverlight 共享的每个实体的副本。然后,当您使用 Visual Studio 添加服务引用时,它会很聪明,不会从 Player、Game 和 User 创建副本到您的 Silverlight 项目。
如果您想使用 Ria 服务,它无论如何都会创建您实体的副本。
希望有帮助
约翰
RIA 服务肯定会为您减轻所有 WCF 管道的负担。它有一些小缺陷(缺少某些数据类型),但对于大多数问题都有解决方法。
验证模型(使用属性装饰和自定义验证器)非常强大,是悬挂业务规则的好地方。
RIA 与 ASP.Net 愉快地共存,这是另一个优点。在幕后,它只是另一个 WCF 服务。我们很高兴将 RIA 服务与 MVVM和Prism 一起使用。
这是一个久经考验的功能丰富的模型。我发现的唯一问题与多对多关系有关。再次有解决方法。
由于 RIA 变更集是为您管理的,包括POCO,这是最需要关注的领域。将您的 EF 模型直接暴露给 RIA 被认为是“不好的”,这肯定不会使您免受数据更改的影响。
我还不能特别推荐任何一种模式(仍在试验中),但请确保您的选择与 IQueryable 兼容。用于服务器端执行的分页功能和附加到 Linq 查询是您不想失去的功能!