【问题标题】:Access to database directly with EF or access through WCF that uses EF?直接使用 EF 访问数据库还是通过使用 EF 的 WCF 访问?
【发布时间】: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


    【解决方案1】:

    您要查找的是Web Api。您甚至可以添加 web api 2 控制器,这是一个模板 api 控制器,带有一些示例方法,可与 Entity 框架一起使用。

    确实没有理由使用 WCF(不是为这类东西设计的)使事情变得过于复杂。 Web API 可以与 owin 等一起使用来处理用户帐户的身份。

    【讨论】:

      【解决方案2】:

      如果您坚持使用单一客户端,则不需要合并 WCF 服务。一旦出现多个客户端并且客户端不仅读取而且写入数据,那么您可能会遇到同时访问数据库的情况,这可能导致数据被覆盖。为了实现同步,一些服务会变得很方便。当然,WCF 服务可能有助于提高性能,但如果您利用单向操作、如果没有交换敏感数据则降低安全级别等选项,则影响将不会明显。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-23
        • 2011-01-30
        • 1970-01-01
        • 2013-02-07
        • 2022-11-30
        • 1970-01-01
        • 2011-08-07
        • 1970-01-01
        相关资源
        最近更新 更多