具有 WCF 数据的 WPF 应用程序 - EF、Linq2Sql 或 WCF 数据服务 - 无似乎 'Easy'

标签 wpf wcf linq-to-sql entity-framework ado.net

我正在做一些我认为很正常的事情(尽管我个人以前没有这样做过),并且我认为会有一个“无需思考”的前进方式,但我还没有找到它- 这真的令人沮丧。

我将创建一个 WPF 应用程序,这是一个面向数据的业务应用程序。我的数据将来自具有标准 SQL Server 2008 数据库的远程 IIS 服务器(由我控制),因此 Web 服务/WCF 似乎是前进的方向。远程服务需要通过用户(WPF 客户端)用户名/密码登录(合理地)保证安全。

我不想使用第 3 方 ORM 产品,但我希望数据层(服务和数据库之间)能够处理非常简单的 ORM 类型功能(我真的不想手工制作数据检索)和持久层)。我不太担心并发性,因为这将是一个相当简单的应用程序。

我的选择似乎是以下之一:

  1. 基于 WCF 的 ADO.NET Entity Framework
  2. 基于 WCF 的 Linq2Sql
  3. WCF 数据服务

经过进一步调查,以上似乎都不是我所追求的“理所当然”

1) ADO.NET Entity Framework - 我尝试过这个,并遇到了通过 WCF 序列化对象的各种问题。即使当我尝试生成 POCO 实体并使用它们时,我也必须使用自定义属性来装饰服务契约,只是为了让它不会一直出错,而且我似乎必须手动启动除平面对象图之外的任何东西。在我看来,EF 根本就不是为了通过服务公开而设计的。

2) Linq2Sql - 这看起来并不比 EF 好多少。我似乎不得不手动启动太多东西。我已经尝试过设计器和 SQLMetal,但似乎没有什么“能正常工作”——这一切都需要摆弄。

3) WCF 数据服务 - 从表面上看,这似乎是一个不错的选择,但本质上,我似乎只是在服务层上“原始”公开我的 SQL 数据库表。无论如何,我都不是这项技术的专家,但这似乎是一种潜在危险的方法,而且最重要的是,它似乎不支持任何类型的访问安全作为标准(你必须破解它才能要求身份验证)。

正如我所说,这种情况感觉应该有一个简单的解决方案,但我仍然摸不着头脑。我已经用 .NET 技术做了很多事情,但说实话,这个领域在我的理解中存在一些漏洞,所以如果我的任何评论或假设是天真的,我深表歉意。

当然,很可能我能做的就是在 EF 或 Linq2SQL 上进行“hacky”长距离循环,在这种情况下,我可以卷起袖子,接受我还没有这样做的事实错过了一个更优雅的解决方案。

任何帮助/建议将不胜感激。

最佳答案

这有点主观,但我会提供我的意见。

首先,忘记 L2SQL - 它基本上已经过时,并且没有 EF4 的完整 POCO 支持(它可以完成,但需要 XML 修补或 SQLMetal 生成),这意味着序列化您的实体将是一个左-向右实体克隆噩梦。

我会使用 ADO.NET Entity Framework 而不是 WCF,特别是 Entity Framework 4.0。您的模型将具有丰富的灵活性(包括应用面向对象原则(例如继承)的能力)。

使用 self 跟踪实体。是的,您必须装饰服务契约(Contract) - 这是设计使然,并且有很多原因。

您始终可以使用 DTO,而不是序列化实际的 EF 实体。

OData 的灵活性和简单性也非常出色。但是,如果您仅通过单个客户端应用程序使用模型,那么在我看来,专用服务层 (WCF) 是更好的方法。

关于具有 WCF 数据的 WPF 应用程序 - EF、Linq2Sql 或 WCF 数据服务 - 无似乎 'Easy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4438455/

相关文章:

c# - 主/细节的通用Viewmodel模式

wcf - 我应该选择什么框架来构建 WCF Restful API

wcf - Servicebus Relay 如何中继到正确的 End Point

c# - CaSTLe Windsor 重建实例

c# - 我们如何在 wpf 中使用数据网格?

wpf - 为什么我的 GUI 卡住?

wpf - 使用 BlockUIContainer 进行流文档分页

c# - 使用单个 TransactionScope 包装大量数据库更新时出现异常

linq-to-sql - 编译查询和 "Parameters cannot be sequences"

c# - 为什么在LINQ查询中调用方法时不能使用范围值的属性作为参数?