使用EF直接访问数据库还是通过使用EF的WCF访问?

时间:2015-12-23 17:17:58

标签: entity-framework wcf

我有一个访问Sql Server数据库的应用程序。我在dll中有一个可以由客户端使用的存储库,可以直接连接到数据库。

另一个选择是客户端连接到WCF服务,此服务使用实体框架存储库连接到数据库。

正如所料,如果客户端使用EF直接连接到数据库,比通过WCF更快,所以我想知道第二个选项是否是个好主意。

直接使用EF的广告:

  • 我不需要维护WCF层。
  • 速度更快。

Disavanteges:

  • 猜测我有很多客户端并修复了存储库中的错误,我必须确保所有客户端都已更新,以确保他们使用最新版本以避免数据进入数据库时​​出现问题。我不知道用.NET是否可以控制客户端如果检测到新的dll版本就无法访问数据库。

选项只是在网络文件夹中只有客户端的副本,所以客户端运行此副本,但这不是很好,因为如果我从具有慢速Internet连接的计算机连接(与然后它非常慢,因为它必须在内存中加载所有应用程序(至少是exe和其他dll),这非常慢。所以解决方案是运行应用程序的本地副本,但后来我遇到了同样的问题,如何确保客户端运行最新版本的存储库。

如果我使用WCF:

  • 我确保使用存储库的最新版本。
  • 也许我可以更好地控制身份验证,但目前我不需要此功能。
  • 将来,我可以开发一个移动应用程序来访问数据库。至少现在,因为windows phone应用程序可以直接使用实体框架而我需要通过WCF连接。但如果我没有错,使用EF7通用应用程序也可以使用EF。也许它对Android应用程序很有用。

缺点:

  • 我必须维护WCF层。
  • 这很慢,因为它必须序列化和反序列化,我注意到速度的不同。

所以我的问题是,这是连接数据库的常用方法或一般方法。我总是在局域网中连接,或者如果我在外面,使用OpenVPN创建的VPN,儿子在实践中,我总是连接到局域网内。

关于安全问题,到目前为止我还没有控制授权,因此应用程序的任何用户都可以执行此操作。在将来,我可以控制WCF,或者如果我直接使用EF,也许在数据库中具有权限,则控制对表的访问。

非常感谢。

2 个答案:

答案 0 :(得分:1)

你要找的东西是Web Api。甚至还可以添加web api 2控制器,它们是一个模板api控制器,其中一些示例方法与Entity框架一起使用。

enter image description here

通过使用WCF(不是为这种东西设计),没有理由让事情变得过于复杂。 Web API可以与owin等一起使用,以处理useraccounts的身份。

答案 1 :(得分:1)

如果您坚持使用单个客户端,则无需合并WCF服务。一旦多个客户端发生并且客户端不仅读取而且还写入数据,那么您可能会遇到同时访问数据库的原因,这可能导致数据被过度写入。为了实现同步,一些服务会变得很方便。当然,WCF服务可能会提供性能,但如果您利用单向操作等选项,如果没有交换敏感数据等安全级别下降等,那么影响将无法察觉。