【发布时间】:2015-12-23 17:17:57
【问题描述】:
我有一个访问 Sql Server 数据库的应用程序。我在 dll 中有一个存储库,可供客户端使用,并且可以直接连接到数据库。
另一种选择是客户端连接到 WCF 服务,该服务使用实体框架存储库连接到数据库。
正如预期的那样,如果客户端使用 EF 直接连接到数据库,比通过 WCF 更快,所以我想知道第二个选项是否是个好主意。
直接使用EF的优点:
- 我不必维护 WCF 层。
- 速度更快。
缺点:
- 猜想我有很多客户端并且我修复了存储库中的一个错误,我必须确保所有客户端都已更新,以确保它们使用最新版本以避免数据进入数据库时出现问题。我不知道如果使用 .NET,如果检测到新版本的 dll,我是否可以控制客户端无法访问数据库。
一个选项是在网络文件夹中只有客户端的副本,因此客户端运行此副本,但这不是很好,因为如果我从互联网连接速度较慢的计算机连接(使用VPN)然后它非常慢,因为它必须在内存中加载所有应用程序(至少是 exe 和其他 dll),这非常慢。所以解决方案是运行应用程序的本地副本,但是我遇到了同样的问题,如何确保客户端运行存储库的最新版本。
如果我使用 WCF:
- 我确保使用存储库的最新版本。
- 也许我可以更好地控制身份验证,尽管目前我不需要此功能。
- 将来,我可以开发一个移动应用程序来访问数据库。至少现在,因为windows phone应用程序可以直接使用实体框架,我需要通过WCF连接。但如果我没记错的话,EF7 通用应用程序也可以使用 EF。也许它对 android 应用程序很有用。
缺点:
- 我必须维护 WCF 层。
- 它很慢,因为它必须进行序列化和反序列化,而且我注意到速度有所不同。
所以我的问题是,这是连接数据库的常用方式还是通用方式。我总是在 LAN 中连接,或者如果我外出,使用 OpenVPN 创建的 VPN,实践中的儿子,我总是在 LAN 内连接。
关于安全问题,目前我无法控制授权,因此该应用程序的任何用户都可以做任何事情。将来,我可以通过 WCF 来控制,或者如果我直接使用 EF,也许可以通过数据库中的权限来控制对表的访问。
非常感谢。
【问题讨论】:
标签: entity-framework wcf